CGI (Common Gateway Interface)

prostředí CGI scriptu

HTTP server nastavuje pro CGI script celou řadu proměnných prostředí, které může CGI script využít. Příklad:

SERVER_PORT=80
GATEWAY_INTERFACE=CGI/1.1
PWD=/var/www/linux-spsd/cgi-bin/praktika
HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i586; en-US; rv:0.9.9) Gecko/20020311
HTTP_REFERER=http://server.fh.cz/praktika/index.html
REMOTE_PORT=2708
HTTP_HOST=server.fh.cz
SCRIPT_FILENAME=/var/www/www/cgi-bin/praktika/environment.cgi
HTTP_CONNECTION=keep-alive
HTTP_ACCEPT_ENCODING=gzip, deflate, compress;q=0.9
HOSTNAME=server.fh.cz
SERVER_SIGNATURE=
Apache/1.3.22 Server at server.fh.cz Port 80

HTTP_CACHE_CONTROL=max-age=0
SERVER_ADMIN=root@localhost
REQUEST_METHOD=GET
SERVER_ADDR=192.168.1.254
MACHTYPE=i386-redhat-linux-gnu
HTTP_KEEP_ALIVE=300
SCRIPT_NAME=/cgi-bin/praktika/environment.cgi
REMOTE_ADDR=192.168.1.22
SERVER_SOFTWARE=Apache/1.3.22 (Unix) (Red-Hat/Linux) DAV/1.0.2 PHP/4.0.6 mod_throttle/3.1.2
QUERY_STRING=
LANG=cs_CZ
SERVER_NAME=server.fh.cz
SHLVL=1
SERVER_PROTOCOL=HTTP/1.1
HTTP_ACCEPT=text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png;q=0.2,text/css,*/*;q=0.1
REQUEST_URI=/cgi-bin/praktika/environment.cgi
DOCUMENT_ROOT=/var/www/www/html
HTTP_ACCEPT_LANGUAGE=cs, en;q=0.66, ru;q=0.33
SHELL=/bin/false
HOSTTYPE=i386
OSTYPE=linux-gnu
TERM=dumb
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
HTTP_ACCEPT_CHARSET=ISO-8859-2, utf-8;q=0.66, *;q=0.66

předávání dat CGI programům - metoda GET a POST

Při zpracování vstupních formulářů je nutno předat CGI scriptu hodnoty polí formuláře, při kliknutí na klikací mapu předat souřadnice oblasti, značka <INPUT> umožňuje poslat na server mj. i soubor ze strany prohlížeče. CGI scripty tedy musí mít mechanismus pro převzetí vstupních dat. Používají se dvě metody - GET a POST - jsou to vlastně názvy metod protokolu HTTP - další jsou např. HEAD (GET bez těla), OPTIONS (dotaz na možnosti serveru), PUT (poslání souboru na server), DELETE (smazání souboru na serveru), TRACE (test WWW serveru). Typ použité metody se CGI script dozví z proměnné  REQUEST_METHOD.

metoda GET

Metoda GET se používá v případě, kdy jako vstupní argumenty nejsou zasílána rozsáhlá data - předání parametrů probíhá prostřednictvím proměnné prostředí QUERY_STRING a obecně nelze říci jaká je maximální povolená délka hodnoty proměnné (pokud při sestavování jádra Linuxu nespecifikujeme jinak, je max. velikost environmentu 128 kB) Tato metoda se používá

metoda POST

Metoda POST je standardní a více používaný způsob předávání argumentů spouštěnému skriptu. Důvodem většího rozšíření je univerzálnost i pro rozsáhlá data. Ta jsou totiž zasílána na standartní vstup spouštěného programu a ten není omezen velikostí předávaných dat. Dalším důvodem je fakt, že ne všechna data mohou být (z důvodu bezpečnosti) přenášena v čitelném textovém tvaru. V rámci přenosu na standardní vstup mohou být kódována.
Argumenty jsou programu zasílány ve formátu:
  promenna1=hodnota1&promenna2=hodnota2...

kam umístit CGI script

CGI script nelze z důvodu bezpečnosti spouštět z jakéhokoliv místa na serveru. Obvykle je třeba dohodnout se se správcem serveru o podmínkách provozování CGI scriptů. Mimo jiné byste se měli dozvědět, kam script umístit. Umístění souvisí také s problémem rozpoznání scriptu WWW serverem, který musí rozlišit, zda má soubor poslat klientovi nebo jej spustit. Rozlišení se provádí buď dle adresáře, kde soubor je (scripty jsou jen v definovanych adresářích), nebo dle koncovky souboru (scripty mívají .cgi,.pl).

Je také třeba zajistit, aby CGI script byl spustitelný pro WWW server. V Unixovém prostředí běží WWW server obvykle s minimálnimi právy (např. uživatel nobody), proto musí mít script nastavená práva pro spouštění jakýmkoliv uživatelem.

Abyste se vyhnuli zbytečnému hledání chyby ve scriptu, když ve skutečnosti je špatně nakonfigurovaný server, doporučuji nejdříve zkusit zcela jednoduché scripty.