Telemat Lab's home page 


Copyright © 2000 Università di Firenze. All rights reserved. 

Free license available. 

CGI - Common Gateway Interface



a cura di Valentina Damato e Stefano Ciofi
Revisore: Prof. Franco Pirri

Hyperbook Indice delle lezioni Indice lezione precedente Indice lezione successiva Inizio della lezione corrente

Indice degli argomenti






Hyperbook Indice delle lezioni Indice lezione precedente Indice lezione successiva Inizio della lezione corrente


CGI - Common Gateway Interface


Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
Lezione su HTML FORMs 
  
 
Slide successiva 
Testo 
 
Slide 1/9

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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 2/9

INTERFACCIA CGI

Per instaurare la comunicazione tra il server ed un programma si rende necessario stabilire un'interfaccia apposita. La COMMON GATEWAY INTERFACE (CGI) è uno standard per interfacciare applicazioni esterne con un server HTTP. Quindi l'interfaccia CGI sta tra il server HTML ed il programma residente sul server. Le applicazioni che usano tale standard per comunicare con il server prendono il nome di programmi CGI. Tali programmi permettono di rendere dinamico lo scambio dei dati tra client e server. Quindi le operazioni si svolgono nel seguente ordine:
  1. Il client, tramite il protocollo HTTP, invia al server la FORM compilata con la richiesta di eseguire un programma CGI con i dati passati come parametri d'ingresso.
  2. Una volta arrivato al server remoto il contenuto della FORM questo, attraverso l'interfaccia CGI, richiama il programma CGI passandogli i dati inviati dal client.
  3. Eseguite le operazioni necessarie il programma CGI può interagire con un database contenuto sul disco del server dopodichè rimanda al server dei dati elaborati, sempre facendo uso dell'interfaccia CGI, per rispondere al client, ad esmpio si può comunicare al client se l'operazione è andata a buon fine o meno.
  4. Il server invia al client i dati elaborati dal programma CGI tramite il protocollo HTTP.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 3/9

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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 4/9

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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 5/9

CGI E FORMs

Normalmente un CGI viene usato come action di una FORM. I programmi CGI ed il server comunicano principalmente attraverso quattro modi:
  1. Variabili d'ambiente di sistema.
  2. Comando di linea (usato per eseguire il programma CGI in una shell di sistema operativo).
  3. Standard input (usato soprattutto con il metodo POST).
  4. Standard output.
PASSAGGIO DEI CAMPI DELLA FORM AL PROGRAMMA CGI
I controls della FORM vengono passati al CGI in maniera diversa a seconda che il METHOD della FORM sia GET o POST.
In UNIX una GET provoca un'invocazione del CGI e i controls sono passati come argomenti della command line nella shell di sistema. La URL inviata sarà del tipo:

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.

>esempioinvocato dalla action
>name=mario rossiscritto 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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 6/9

CGI OUTPUT

Una volta richiamato il programma CGI elaborerà i dati in ingresso ed emetterà un output per il server e quindi per il client in attesa di risposta. I dati ritornano al server attraverso un'unica via: lo standard output, come previsto dall'interfaccia CGI. Il server preleva poi i dati dallo standard output e li invia al client, mettendoli nell'entity body secondo il protocollo HTTP, esattamente come gli ha ricevuti dallo script CGI.
Non è detto che l'output prodotto dal programma CGI sia una pagina HTML creata dinamicamente in risposta ad una request del client (anche se si tratta della cosa più comune). Si potrebbe trattare di un'immagine, ad esempio un contatore d'accesso che si incrementa ogni qualvolta che qualcuno visita quella particolare pagina web. In questo caso il codice HTML sarà:

<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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 7/9

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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
Slide successiva 
Testo 
 
Slide 8/9

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.

Slide precedente Slide successiva



Indice delle lezioni 
Indice lezione precedente 
Indice lezione corrente 
Indice lezione successiva 
  
Inizio della lezione 
Slide precedente 
  
Testo 
 
Slide 9/9

Prima di scrivere un programma CGI il programmatore deve sapere:

Infatti, in base a queste informazioni, si può scegliere un linguaggio di programmazione invece di un altro e si può scegliere di costruire il programma in un modo particolare.
Si possono però riscontrare due problemi. Il primo riguarda il caso in cui il CGI riceva FORMs di tipo multipart/form-data. Il secondo riguarda la possibilità che il programma sia evocato contemporaneamente da più di un utente. In quest'ultimo caso si deve fare attenzione all'uso di files temporanei ed agli accessi ai database, magari introducendo una priorità tra gli utenti per regolare la concorrenza.

Slide precedente 


Torna all'indice Ultimo aggiornamento: 27 Luglio 2000
Hyperbook Indice delle lezioni Indice lezione precedente Indice lezione successiva

Telemat Lab's home page 
Explore the TELEMAT site!!