protokol pro komunikaci mezi webovým serverem a programem generujícím dynamický obsah From Wikipedia, the free encyclopedia
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í.
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.
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";
}
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
V tomto článku byl použit překlad textu z článku Common Gateway Interface na anglické Wikipedii.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.