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

kripton:/usr/lib/cgi-bin# cat environment.sh
#!/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.

    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.