Corso di CGI

GET e POST

 

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 l’indirizzo 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 dell’avvento 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 l’indirizzo 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 dell’host 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 all’indirizzo 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 l’indirizzo e la query, cercando il punto interrogativo. L’indirizzo corrisponde allo script che deve essere chiamato, mentre la query viene messa nella sua variabile d’ambiente 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 l’indirizzo:

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 dall’indirizzo, in maniera invisibile per l’utente. Il server riceve i dati e fa partire lo script. Però, a differenza del metodo GET, la variabile d’ambiente 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 l’ultimo 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 l’uso 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 l’invio 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