- I metodi POST e HEAD di HTTP -
 
COSA SERVE PER QUESTO TUTORIAL
 Chiedi sul FORUM | Glossario cognizioni generiche sul funzionamento del web
Come inviare grandi quantità di dati o ottenere meta-informazioni su una pagina

I METODI POST E HEAD
I metodi HTTP per inviare quantità di dati sostanziose e ottenere informazioni su una pagina

Abbiamo visto finora solamente il metodo GET, ma, come accennato, esistono altri metodi: principalmente POST e HEAD. HEAD è simile in tutto e per tutto a GET se non per il fatto che comunica al server di non inviare il contenuto della risorsa ma solo le intestazioni. Ad esempio è possibile ottenere le informazioni sulla data di modifica di una pagina senza scaricarla completamente grazie alla seguente richiesta:


HEAD /pagina.htm HTTP/1.1
Host: localhost

Infatti la risposta del server potrebbe ad esempio essere:


HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Fri, 22 Feb 2008 18:36:22 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 44820

Il server si limiterà a comunicare le intestazioni per la risorsa, quali dimensioni, MIME type, codifica, data di modifica e altro, ma non il contenuto vero e proprio.
L'altro metodo HTTP che tratteremo è POST. POST permette di inviare dati, ma al contrario di GET non li invia tramite URL, metodo non sicuro (gli URL possono venire memorizzati in statistiche o log facilmente) e che limita la quantità di dati da inviare (convenzionalmente l'URL non dovrebbe superare i 2'048 byte di lunghezza). Vediamo come viene effettuata (e quindi anche come effettuare tramite telnet) una richiesta HTTP POST:


POST /pagina.htm HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

saluto=ciao&saluto2=salve

Come si può vedere questa richiesta è simile in tutto e per tutto ad una normale richiesta GET se non per il fatto che specifica anche i parametri Content-Length e Content-Type (che in precedenza avevamo visto utilizzare solamente dal server) e dopo due ritorno a capo seguiti da una serie di campi con i relativi valori. Content-Length indica la quantità di dati che si sta per inviare, mentre Content-Type che tipo di dati sono; application/x-www-form-urlencoded indica che i dati rispettano la stessa sintassi che segue il "?" quando si inviano dati tramite URL. In sostanza, la richiesta POST sopra corrisponderebbe a questa richiesta GET:


GET /pagina.htm?saluto=ciao&saluto2=salve HTTP/1.1
Host: localhost

Come detto, usare POST è più sicuro in quanto i dati inviati con questo metodo non finiscono su statistiche di pubblicità all'interno del sito o comunque in altri log a cui malintenzionati potrebbero accedere. La richiesta POST fatta sopra potrebbe essere formulata dal seguente form HTML:


<form method="post" action="http://localhost/pagina.htm">
    <input type="text" name="saluto" value="ciao">
    <input type="text" name="saluto2" value="salve">
    <input type="submit" value="Invia">
</form>

Per ottenere un parametro inviato con POST in PHP si usa $_POST['saluto'], mentre in ASP .Net Request.Form("saluto").
 

<< INDIETRO by VeNoM00