Ad ogni campo di una form è associato un nome con il comando NAME. Ciò che viene immesso dall'utente nel campo è il valore del campo. Per le caselle, questo valore è stabilito dal comando VALUE. Nomi e valori costituiscono il contenuto della form. Quando l'utente preme il tasto di "submit", il contenuto della form viene codificato ed inviato come uno "stream" ininterrotto di dati. Per non generare ambiguità in ricezione, i nomi dei campi vengono separati dai loro rispettivi valori con un carattere di "=". Si vengono a creare così coppie nome=valore, che vengono a loro volta separate da un carattere di "&". Inoltre nomi e valori vengono codificati secondo lo standard URL, che prevede che gli spazi vengano sostituiti dal carattere "+". Inoltre lo standard URL prevede che alcuni caratteri particolari vengano sostituiti con il carattere "%" . In altre parole, nomi e valori dei campi della form vengono assemblati in un unico lungo vettore ed inviati in questo modo:
nome1=valore1&nome2=valore2&nome3=valore3&...dove nome1, nome2, etc. sono i nomi dei campi della form, assegnati con il comando NAME e valore1, valore2, etc. sono i valori dei campi della form. Essi sono assegnati dall'utente per campi di testo riempibili, mentre sono assegnati dal comando VALUE per campi di tipo casella. Per portare un esempio più concreto analizziamo la form del seguente codice HTML:
Questo codice HTML invia un vettore di questo genere, ammesso che nel primo campo sia stata immessa la frase "questa e' una prova":
var_1=questa+e'+una+prova&var_2=Questo+e'+il+testo+di+default&var_3=...Nel caso l'utente non riempia i campi di testo e quindi non assegni ai nomi ad essi associati nessun valore, nel vettore saranno comunque presenti i nomi delle variabili: "nome1=&nome2=&...". Quando è stato scelto questo metodo GET, viene generata una URL del tipo:
action?nome1=valore1&nome2=valore2&nome3=valore3&...dove action è la URL specificata con il comando ACTION. In pratica, la nuova URL è formata dalla URL specificata con ACTION alla quale viene aggiunto un carattere di "?" e poi, subito dopo, il vettore che contiene i nomi e i valori dei campi del form. In altre parole, con il metodo GET il contenuto della form compilata dal client viene inviato insieme alla URL. Per portare un esempio concreto, una form col METHOD=GET provocherebbe una URL del tipo:
http://www.dacrema.com/cgi-bin/post-query?var_1=questa+e'+una+prova&var_2=Questo+e'+...Per eseguire il programma CGI (il programma che dovrà elaborare i dati ricevuti), il server passa, quindi, ad una shell di sistema operativo il seguente comando di linea:
>post-query?var_1=questa+e'+una+prova&var_2=Questo+e'+...In altre parole, con il metodo GET (che è il default), il server passa il contenuto della form al programma CGI su un comando di linea di una shell del sistema operativo. Dal momento che i comandi di linea devono avere una lunghezza finita (massimo 256 byte in UNIX), il metodo GET è molto limitativo per quanto riguarda le dimensioni dei dati che l'utente può inviare con una form. Di seguito è riportato per intero un esempio di "pacchetto" HTTP (HTTP request) che il client spedisce al server usando il metodo GET:
In tale pacchetto si possono notare:
Il metodo usato (GET).
La URL inviata dal client, privata della sua prima parte, cioè del prefisso "http://" seguito dal nome dello host. Essa comprende pure il contenuto della form codificato secondo lo standard URL
La versione del protocollo HTTP usata (in questo caso la 1.0).
Una lista (Accept:...Accept:...) che specifica un certo numero di tipi di dati dello standard MIME . I tipi di dati elencati sono quelli che il client è capace di accettare dal server. Il server è tenuto a rispondere solo con tipi di dati dello standard MIME accettabili dal client.
Il tipo e la versione del "browser" usato dal client (User-a gent).
Il nome dello host che ha inviato la richiesta al server (From).
Una linea vuota che chiude il pacchetto.
Le uniche cose differenti rispetto al pacchetto che richiede un semplice documento HTML sono l’ aggiunta dell'identificatore che indica al server di eseguire un programma (p.e. /cgi-bin/)e l'a presenza del contenuto della form codificato secondo lo standard URL. Con il metodo POST, a differenza che con il GET, alla URL specificata da ACTION non viene aggiunto alcunché. Ciò significa che il comando di linea nella shell del sistema operativo contiene solo il nome del programma CGI. Per quanto riguarda invece i dati della form, essi vengono inviati al programma CGI tramite lo standard input del server. L'uso dello standard input consente di inviare dati lunghi a piacimento, senza nessun pericolo che questi vengano troncati come nel metodo GET. Il programma CGI perciò riceverà nomi e valori dei campi della form compilata dal client semplicemente accedendo al dispositivo di standard input. Di seguito è riportato per intero un esempio di "pacchetto" HTTP che il client spedisce al server usando il metodo POST.
In più rispetto al pacchetto HTTP inviato col metodo GET abbiamo:
Il tipo di dati dello standard MIME che il client invia al server (Content-type). In questo caso si tratta di dati di una form, codificati secondo lo standard URL (application/x-www-form- urlencoded).
La lunghezza dei dati che il client invia al server (Content-length)
Una linea vuota che separa lo header dai dati trasmessi (il contenuto della form)
I dati trasmessi (il contenuto della form, codificato secondo lo standard URL).
Si osservi quindi che il metodo POST pone il contenuto della form dopo lo header del pacchetto (cioè dopo la linea vuota). Ciò consente di non alterare la URL ed inoltre il metodo POST specifica tipo e lunghezza dei dati che il client invia al server (Content-type e Content-length). Una volta richiamato il programma CGI, esso elaborerà i dati in ingresso ed emetterà un output per il client in attesa di risposta. l server preleva poi i dati dallo Standard Output e li invia al client seondo il protocollo HTTP. Di seguito è riportato un esempio di "pacchetto" HTTP inviato dal server al client (HTTP response):
Segue la descrizione di ciò che viene specificato nel pacchetto:
Versione usata del protocollo HTTP (HTTP 1.0) e conferma che la richiesta del client è stata evasa con successo (200 OK).
Data attuale
Tipo e versione del server (NCSA/1.1).
Versione dello standard MIME (MIME-version: 1.0). Lo standard MIME specifica i tipi di dati che possono essere inviati con il protocollo HTTP.
Altra data relativa alle ultime modifiche relative al server.
Tipo di dati dello standard MIME inviati al client (Content-type). Questo tipo di dati deve essere uno di quelli specificati con "Accept" nel pacchetto inviato dal client). Il server infatti è tenuto a rispondere con dati che il client è in grado di interpretare.
Lunghezza dei dati inviati (Content-length).
Una linea vuota che indica la fine dello header (intestazione).
Dati inviati (in questo caso un documento HTML).
Nella maggior parte dei casi reali il programma CGI genera un apposito documento HTML ove sono presenti le risposte alle domande del client. Bisogna notare che si può inviare al client qualsiasi tipo di documento HTML, anche uno che contiene a sua volta un'altra form, magari elaborata dal programma CGI in maniera specifica per un determinato client.
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.