Nella piccolo form della lezione precedente, abbiamo scritto il
tag <FORM> in questo modo:
<form action="http://localhost/cgi-bin/script.pl"
method="GET">
Possiamo capire che il parametro action specifica lindirizzo
del nostro script, ma cosè quel method=GET ?
Si tratta, appunto, del metodo che verrà usato per inviare i dati
del form. Si usano comunemente due metodi, GET e POST. Vediamoli
in dettaglio.
GET
GET è il metodo più usato per i form semplici, perché è il più immediato
e semplice da capire. Inoltre, prima dellavvento di moduli
preconfezionati per CGI, era anche il più facile da usare negli
script.
Per capire come funziona, caricate il form della lezione precedente,
riempitene i campi, e premete il tasto submit. Guardate adesso con
attenzione lindirizzo con cui viene chiamato lo script. Sarà
qualcosa del genere:
http://localhost/cgi-bin/script.pl?nome=alfio&cognome=puglisi
La prima parte è un normalissimo indirizzo http, che specifica il
nome dellhost e il percorso completo per arrivare al file
(nel nostro caso, allo script). Poi viene aggiunto un punto interrogativo
(?), e dopo questo si trovano delle coppie nome=valore,
separate da degli ampersand (&).
Ci siete? E facile: le coppie nome=valore vengono direttamente
dal form: i nomi sono i nomi degli elementi del form, e il valore
è quello che ci avete scritto dentro. Quando premete il tasto submit,
nomi e valori vengono accoppiati con =, uniti con degli
& e attaccati allindirizzo dello script con
un ?. Il tutto viene mandato al server web come indirizzo
della pagina richiesta.
Il server, naturalmente, riconosce questa sintassi. Anzi, a dire
il vero ne riconosce solo una parte: tutto quello che fa è di separare
lindirizzo e la query, cercando il punto interrogativo.
Lindirizzo corrisponde allo script che deve essere chiamato,
mentre la query viene messa nella sua variabile dambiente
QUERY_STRING.
POST
Il metodo POST è un po diverso: modificate il form in questo
modo:
<form action="http://localhost/cgi-bin/script.pl"
method="POST">
riprovate ad eseguire il submit, e osservate lindirizzo:
http://localhost/cgi-bin/script.pl
Sorpresa! Stavolta non cè niente. Ma allora, come fa il nostro
script a ricevere i dati?
La chiave sta nella comunicazione dietro le quinte che
avviene tra il browser e il server remoto.
Usando il metodo POST, il browser manda i dati del form separati
dallindirizzo, in maniera invisibile per lutente. Il
server riceve i dati e fa partire lo script. Però, a differenza
del metodo GET, la variabile dambiente QUERY_STRING non contiene
nulla. Invece, lo script può ricevere i dati leggendo il suo standard
input, con un qualunque metodo permesso dal linguaggio in cui è
scritto.
A confronto
Quali sono le differenze principali tra i due metodi?
- GET è visibile sulla barra degli indirizzi (e nei log del server),
mentre POST no.
- GET è limitato dalla lunghezza permessa per la barra degli indirizzi:
questa varia da browser a browser (e da server a server), ma realisticamente
non può superare qualche Kilobyte. Per POST; invece, non ci sono
limiti se non la velocità di connessione.
- GET è più semplice da implementare nello script, se si fa tutto
a mano. Se invece si usano moduli preconfezionati (come il modulo
CGI che usiamo noi), tutto il lavoro lo fa il modulo, e per noi
non cè differenza.
Come vedete, i primi due punti sono a favore del metodo POST, mentre
lultimo sarebbe un fortissimo punto a favore del GET, a causa
della nostra pigrizia congenita :-) Per fortuna, il modulo CGI ci
viene in soccorso e rende indifferente luso dei due metodi,
almeno dal punto di vista della programmazione.
Sembra che tutto sia in favore del POST, ma.. guardate questo codice
html:
<A HREF=http://localhost/cgi-bin/script.pl?nome=alfio&cognome=puglisi>Clicca
qui</a>
Visto? Usando il metodo GET; è possibile simulare linvio
di un form con un semplicissimo link! La richiesta del browser è
la stessa, e il risultato pure. Questa è una caratteristica estremamente
utile, che prima o poi vi sarà utile sfruttare .
Insomma, la bilancia non pende da nessuna parte. A voi scegliere,
caso per caso, il metodo migliore.
Torna all'indice Generale del corso di Corso di CGI di Software Planet