|
|
|
Per svolgere dei compiti e generare una risposta per il client, il server deve eseguire un programma che ha bisogno di dati in ingresso e che eventualmente genera un'uscita. Il server gestisce lo scambio di informazioni con il client attraverso opportuni protocolli come l'HTTP.
|
|
|
|
|
|
L'interfaccia CGI definisce quindi soltanto il metodo con cui i dati ricevuti da una FORM sono passati dal server al programma CGI e viceversa; si tratta quindi di un problema di I/O. Il programma CGI, che è un programma eseguibile, può essere scritto in un qualsiasi linguaggio purché sia in grado di interpretare i dati che arrivano dal server HTTP. Ad esempio due programmi, uno scritto in C ed uno in Perl, sono diversi ma hanno lo stesso metodo di gestione dell'input e dell'output. Da tenere presente è il fatto che l'interfaccia CGI varia da un sistema operativo all'altro.
|
|
|
MAPPATURA DEL SERVER WEB
Uno script CGI viene invocato tramite un GET o un POST ad una URL che faccia riferimento al CGI stesso. C'è però un problema: il server deve sapere che la URL ricevuta dal client punta ad un CGI e non ad un documento HTML, in quanto la pagina HTML è inviata al client per la sua visualizzazione mentre lo script CGI deve essere eseguito da una shell di sistema.
Allora il server, a seconda della URL che vede, deve essere in grado di modificare le proprie azioni. Questo problema viene risolto mappando sul server diverse directory contenenti alcune pagine HTML, altre programmi CGI. Questa mappatura è scritta in dei file di configurazione del server. Così se una URL punta ad un file contenuto in una directory di pagine HTML, il server web invia il file al client, ma se la URL punta ad un file contenuto in una cartella cgi-bin (ma non è obbligatorio chiamarla così) il server sa che i file contenuti in tale directory devono essere eseguiti perché così è scritto nel file di configurazione. Non è obbligatorio che tutti gli script CGI risiedano nella stessa directory, l'importante è che i loro path siano mappati.
|
|
|
http://telemat.det.unifi.it/cgi-bin/esempio?name=mario+rossi
ed il programma CGI sarà evocato come:
>esempio name=mario rossi
In una POST i controls, presenti nell'entity body dell'HTTP, sono passati tramite lo standard input. La URL sarà:
http://telemat.det.unifi.it/cgi-bin/esempio
ed il programma CGI sarà evocato senza opzioni sulla command line:
>esempio
Subito dopo averlo evocato il server scrive i dati nell'input. Allora il programma CGI dovrà essere in grado di acquisire dati dallo standard input.
| >esempio | invocato dalla action |
| >name=mario rossi | scritto dal server |
Altri parametri vengono derivati dalle variabili d'ambiente, come il METHOD usato, il CONTENT- TYPE, il CONTENT- LENGTH o il tipo di browser usato dal client. Infatti un CGI deve sapere che tipo di browser sta usando il client per fare in modo che tutte le informazioni prodotte dinamicamente siano visibili. Così è possibile creare una pagina HTML fatta su misura per il browser X ma con alcune parti che non sarebbero visualizzate dal browser Y e viceversa. Lo User Agent recupera l'informazione relativa al tipo di browser che, nei sistemi UNIX, è salvata nelle variabili d'ambiente.
|
|
|
<image src="http://telemat.det.unifi.it/cgi-bin/contatore">
con il programma "contatore" che si incrementa di uno tutte le volte che viene evocato. Si potrebbe trattare anche di un reindirizzamento ad un'altra pagina web, oppure di un'altra FORM, magari elaborata dal programma CGI in maniera specifica per un determinato client, oppure nulla.
|
|
|
Un programma CGI può anche venire evocato per produrre pagine dinamiche per fare un rapporto sull'uso del sistema, per produrre pagine personalizzate basate sull'IP number del client, ecc… In questi casi il CGI viene usato senza alcun parametro di ingresso ma produce ugualmente un output a volte basandosi su files di configurazione presenti sul server.
Il client, ovviamente, deve essere informato del tipo di dato che riceve in modo da poterlo interpretare correttamente. Allora è previsto che il programma CGI, come operazione preliminare, invii sullo standard output un'intestazione in cui viene specificato il tipo di dati inviato. Sarà poi il server web a formare il pacchetto completo per il client.
|
|
|
ESEMPIO DI PROGRAMMA CGI
Nello slide precedente è riportato il listato di uno script CGI scritto in C++. Si tratta di un file che produce una pagina HTML in risposta ad una FORM. Tale pagina visualizzerà alcuni parametri relativi al metodo della FORM usato ed altri dati ricavati dalla lettura da parte del CGI delle variabili d'ambiente (getenv è un'istruzione C per Linux per leggere una variabile d'ambiente). Notare come il programma provveda a scrivere nel file di output (che poi sarà la pagina HTML) i tag HTML necessari ed i loro relativi end-tag.
|
|
|
Prima di scrivere un programma CGI il programmatore deve sapere: