Il CGI e' parte del server Web e puo' comunicare con altri programmi che girano sul server. Col CGI il server puo invocare un programma esterno, passendogli dati:
Il CGI permette la creazione dinamica di pagine basate sull'input degli utenti, come pagine di cataloghi personalizzate, rapporti di database, ecc.
Il meccanismo e' come segue:
Il programma che viene invocato dal server per gestire la richiesta del client e' scritto con qualsiasi linguaggio. In particolare al giorno d'oggi il linguaggio Perl sta riscuotendo notevole successo come linguaggio di scrittura di programmi CGI.
Se la richiesta e' stata emessa col metodo 'GET', allora il programma si trova l'input utente formattato secondo specifiche regole nello URL che l'ha invocato. Se la richiesta era inviata col metodo 'POST' (il piu' comune), allora l'input utente e' semplicemente sullo stsndard input.
E' compito del programma CGI mandare a standard output un documento del tipo:
Content-type: text/html <html> <head> <title> ...... ... <head> <body> ......... <body> <html>
La prima linea deve essere sempre la parola chiave Content-type: seguita dal tipo MIME del documento, nel caso di una pagina HTML questo e' text/html.
Questa linea e' tutto quello che e' necessario della testata HTML e segue una linea vuota poi il corpo del messaggio - la vera e propria pagina Web.
La generazione di un applicativo basato su CGI consiste di due parti:
Un esempio di applicativo CGI e' quello della firma del libro visite (guestbook). La parte di 'form' puo' acere il seguente codice HTML:
<html> <head> <title>Guestbook<title> <head> <body bgcolor=#ffffff> <h1>Firmate il Libro Visite!<h1> <p> <form method="GET" action="/cgi-bin/guestbook.pl"> <pre> Nome: <input type="text" name="firstname"> Cognome: <input type="text" name="lastname"> <input type="submit"> <input type="reset"> <pre> <form> <body> <html>
Per interagire con tale form, cliccare qui.
Viene visualizzata una pagina del tipo:
Sono da notare nel codice i seguenti punti:
/cgi-bin. Questa solitamente non e' una directory vera sotto la Radice dei Documenti, ma viene espansa dal server in un'altra directory che si trova fuori dalla Radice dei Documenti. Questo perche' i programmi CGI sono potenzialmente pericolosi per la sicurezza
Il metodo GET invia al server una richiesta di protocollo HTML che nel nostro esempio puo' essere del tipo:
GET /cgi-bin/guestbook.pl?firstname=Paolo&lastname=Rossi HTTP/1.0
Il metodo POST invece invia una richiesta del tipo:
POST cgi-bin/guestbook.pl HTTP/1.0 ...... altri campi di testata .... firstname=Paolo&lastname=Rossi
Un programma in Perl che gestisse tale modulo, nel nostro caso guestbook.pl, dapprima interpreterebbe i campi in input, poi aggiornerebbe una tabella dei visitatori, quindi invierebbe un messaggio di ringraziamento del tipo:
...... print "Content-type: text/html", "\n\n"; print "<html><head><title>Grazie</title></head> print "<body><h3>Grazie per aver riempito il mio Libro Visite</h3> print "</body></html> ......
che produrrebbe una pagina di risposta del tipo: