Quando i web browser fanno una richiesta, questa viene portata al web server corrispondente che poi serve contenuti (X)HTML.
Il contenuto in questione può essere servito direttamente dal webserver in quanto statico, oppure costruito al volo in maniera dinamica grazie ai programmi installati sulla macchina-server.
Come scritto bene su wikipedia, l’interfaccia CGI (Common Gateway Interface) è lo standard (RFC3875) che definisce come un webserver può delegare la generazione di pagine web alle applicazioni sul server stesso: queste applicazioni sono gli script CGI.
Quando il webserver deve servire una pagina dinamica, passa attraverso l’interfaccia CGI per comunicare con l’applicativo la richiesta (ie: URL) tramite le variabili d’ambiente.
Il semplice script bash environment.sh chiamato con un browser
#!/bin/bash
echo "Content-type: text/plain"
echo ""
/usr/bin/env
produce
HTTP_KEEP_ALIVE=300 HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100501 Iceweasel/3.5.9 (like Firefox/3.5.9) HTTP_HOST=kripton.lan SERVER_PORT=80 HTTP_ACCEPT_CHARSET=ISO-8859-1,utf-8;q=0.7,*;q=0.7 DOCUMENT_ROOT=/var/www/ SCRIPT_FILENAME=/usr/lib/cgi-bin/environment.sh REQUEST_URI=/cgi-bin/environment.sh SCRIPT_NAME=/cgi-bin/environment.sh HTTP_CONNECTION=keep-alive REMOTE_PORT=44486 PWD=/usr/lib/cgi-bin REDIRECT_STATUS=200 HTTP_ACCEPT_LANGUAGE=en,it;q=0.7,en-us;q=0.3 HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 REMOTE_ADDR=::ffff:192.168.0.1 SHLVL=1 SERVER_NAME=kripton.lan CONTENT_LENGTH=0 SERVER_SOFTWARE=lighttpd/1.4.19 SERVER_ADDR=:: GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.1 HTTP_CACHE_CONTROL=max-age=0 HTTP_ACCEPT_ENCODING=gzip,deflate REQUEST_METHOD=GET _=/usr/bin/env
(Lo script CGI deve produrre anche il Content-type della pagina.)
Ogni singola richiesta al webserver passando attraverso CGI implica l’avvio di singoli script e quindi di singoli processi sulla macchina; questo ovviamente può causare l’esaurimento delle risorse in breve tempo, nel caso il traffico sia elevato.
La soluzione è stata inventarsi FastCGI che consiste in un singolo processo persistente che chiama i diversi applicativi e comunica attraverso socket UNIX o TCP con il webserver.
Riferimenti su wikipedia: web pages, dynamic web pages, CGI, FCGI, URL, header HTTP.
Write a comment
You need tologin.