Common Gateway Interface

Common Gateway Interface (zkrácenàCGI) je protokol pro propojenàexternÃÂch aplikacàs webovým serverem. To serveru umoà ¾à Âuje delegovat poà ¾adavek od klienta na externàaplikaci, která dle poà ¾adavku vrátàvýstup. Taková aplikace typicky zpracuje nÃÂjaký skript ve webové stránce a webovému serveru navrátàstatickou stránku, která je následnàposlána klientovi jako výstup jeho poà ¾adavku.
RozhranàCommon Gateway Interface bylo v prostà Âedàinternetu pà ÂÃÂtomno jià ¾ od poÃÂátku 90. let a ve své dobàpà Âedstavovalo jediný zpà ¯sob dynamického zpracovánàobsahu. Postupnàvznikla efektivnÃÂjà ¡Ã à Âeà ¡enà(FastCGI, integrace skriptovacÃÂch jazykà ¯ jako modulu WWW serveru) a CGI bylo vytlaÃÂeno do ústranÃÂ.
Dalà ¡Ã informace
Webový server, který podporuje rozhranàCGI, lze nakonfigurovat pro interpretaci adresy URL, která odkazuje na CGI skripty. Standardnàse cgi-bin adresáà Âe ukládajàv koà Âenovém adresáà Âi stromové struktury a se và ¡emi takto uloà ¾enými soubory se nakládá jako s CGI skripty. Dalà ¡Ã populárnàúmluva je rozpoznávánàpomocàpà ÂÃÂpony; napà ÂÃÂklad pokud je u CGI skriptà ¯ pouà ¾ita pà ÂÃÂpona .cgi, mà ¯à ¾e být webový server nakonfigurován tak, aby interpretoval và ¡echny tyto soubory jako CGI skripty.
V pà ÂÃÂpadàpouà ¾itàHTTP metody PUT nebo POST jsou uà ¾ivatelská data pà Âedána v rámci programu pà Âes standardnàvstup. V kaà ¾dém pà ÂÃÂpadàse podle standardu CGI data pà Âedávajàdo aplikace pomocànÃÂkterých specifických promÃÂnných prostà ÂedÃÂ. Toto je v kontrastu s typickým provedenÃÂm, kde argumenty pà ÂÃÂkazové à Âádky jsou pouà ¾ÃÂvány a prostà Âedàje v nepà Âetrà ¾itém bÃÂhu a nedá se mu vÃÂà Âit. Webový server vytváà Âàmalé a úÃÂinné podmnoà ¾iny promÃÂnných prostà Âedàjemu pà Âedaných a pà Âidává detaily vztahujÃÂcàse k vykonánàprogramu.
Jednoduchý pà ÂÃÂklad
NásledujÃÂcàCGI program vypisuje và ¡echny promÃÂnné prostà Âedàpovolené na webovém serveru:
#!/usr/local/bin/perl
##
## printenvâÂÂdemo CGI program which just prints its environment
##
#
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}
- Pokud si webový prohlÃÂà ¾eàvyà ¾Ã¡dá informace promÃÂnných prostà Âedàna http://example.com/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding, 64bitový Microsoft Windows webový server na kterém bÃÂà ¾Ã Cygwin vrátànásledujÃÂcàinformace:
COMSPEC="C:\Windows\system32\cmd.exe" DOCUMENT_ROOT="C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" GATEWAY_INTERFACE="CGI/1.1" HOME="/home/SYSTEM" HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.7" HTTP_ACCEPT_ENCODING="gzip, deflate" HTTP_ACCEPT_LANGUAGE="en-us,en;q=0.5" HTTP_CONNECTION="keep-alive" HTTP_HOST="example.com" HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0" PATH="/home/SYSTEM/bin:/bin:/cygdrive/c/progra~2/php:/cygdrive/c/windows/system32:..." PATHEXT=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" PATH_INFO="/foo/bar" PATH_TRANSLATED="C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\foo\bar" QUERY_STRING="var1=value1&var2=with%20percent%20encoding" REMOTE_ADDR="127.0.0.1" REMOTE_PORT="63555" REQUEST_METHOD="GET" REQUEST_URI="/cgi-bin/printenv.pl/foo/bar?var1=value1&var2=with%20percent%20encoding" SCRIPT_FILENAME="C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/printenv.pl" SCRIPT_NAME="/cgi-bin/printenv.pl" SERVER_ADDR="127.0.0.1" SERVER_ADMIN="(server admin's email address)" SERVER_NAME="127.0.0.1" SERVER_PORT="80" SERVER_PROTOCOL="HTTP/1.1" SERVER_SIGNATURE="" SERVER_SOFTWARE="Apache/2.2.19 (Win32) PHP/5.2.17" SYSTEMROOT="C:\Windows" TERM="cygwin" WINDIR="C:\Windows"
Z výpisu vidÃÂme, à ¾e uà ¾ivatel pouà ¾ÃÂvá prohlÃÂà ¾eàFirefox, který bÃÂà ¾Ã na operaÃÂnÃÂm systému Windows 7. Webový server Apache bÃÂà ¾Ã na systému, který emuluje Unix, a CGI skript má název cgi-bin/printenv.pl
Reference
V tomto ÃÂlánku byl pouà ¾it pà Âeklad textu z ÃÂlánku Common Gateway Interface na anglické Wikipedii.
SouvisejÃÂcàÃÂlánky
ExternÃÂ odkazy
Obrázky, zvuky ÃÂi videa k tématu Common Gateway Interface na Wikimedia Commons
- Popis CGI standardu na stránkách W3.org