Co je soubor CGI?
Soubor CGI je známý jako skript Common Gateway Interface, který používá webový server ke spuštění externího programu pro zpracování požadavků uživatelů. Skript uložený v souboru s příponou .cgi je obvykle napsán v programovacích jazycích C nebo Perl. Byl zaveden od počátků webu, kdy weboví vývojáři chtěli připojit databáze ke svým webovým serverům. Server, který podporoval společnou bránu mezi webovým serverem a databázemi, se dobře hodil ke spuštění kódu CGI.
Formát souboru CGI
Skripty CGI používá webový server, aby umožnil vlastníkovi nakonfigurovat, jak bude s URL nakládáno. Procedura se obvykle provádí označením nového adresáře (kde jsou převážně umístěny dokumenty) jako obsahující CGI skripty; jeho obecně známý název je cgi-bin. Například /usr/local/apache/htdocs/cgi-bin lze vybrat jako adresář CGI na webovém serveru. Když webový prohlížeč požaduje adresu URL, která ukazuje na soubor v adresáři CGI, pak namísto pouhého odeslání tohoto souboru (/cs/usr/local/apache/htdocs/cgi-bin/printenv.pl) do webového prohlížeče, server provede zadaný skript a vrátí výstup skriptu do webového prohlížeče. Stručně řečeno, cokoli, co je skript CGI odeslán na standardní výstup, je přeneseno do webového klienta místo toho, aby bylo zobrazeno v terminálu okna.
Příklad CGI
Následující skript CGI napsaný v Perlu, který zobrazuje všechny proměnné prostředí předané webovým serverem:
#!/usr/bin/env perl
=head1 DESCRIPTION
printenv — a CGI program that just prints its environment
=cut
print "Content-Type: text/plain\n\n";
for my $var ( sort keys %ENV ) {
printf "%s=\"%s\"\n", $var, $ENV{$var};
}
Výstup bude vypadat následovně:
COMSPEC="C:\Windows\system32\cmd.exe"
DOCUMENT_ROOT="C:/Program Files (x86)/Apache Software Foundation/Apache2.4/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, br"
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:67.0) Gecko/20100101 Firefox/67.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.4\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.4/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.4.39 (Win32) PHP/7.3.7"
SYSTEMROOT="C:\Windows"
TERM="cygwin"
WINDIR="C:\Windows"
Použití CGI skriptů
Soubory CGI obsahující skripty CGI se obvykle používají ke zpracování vstupních dat od uživatele a vytváření příslušných výstupních dat. Implementace wiki je jedním z příkladů CGI programu. Pokud uživatelský agent odešle požadavek na název položky, webový server spustí program CGI. Program CGI získá zdroj stránky tohoto záznamu, převede jej do HTML a vytiskne výsledek. Webový server obdrží výstup z programu CGI a vrátí jej uživatelskému agentovi. Pokud pak uživatelský agent zavolá funkci úprav kliknutím na tlačítko „Upravit stránku“, program CGI zobrazí textovou oblast HTML nebo jiný ovládací prvek pro úpravy s obsahem stránky. Nakonec, pokud uživatelský agent klikne na tlačítko „Publikovat stránku“, program CGI převede aktualizovaný kód HTML na zdrojový kód stránky tohoto záznamu a uloží jej.