Cosa sono le richieste HTTP
Le richieste HTTP sono messaggi inviati dal client al server per iniziare una determinata azione. Hanno una determinata struttura e sono caratterizzati da un metodo (o verbo) che permette di distinguere il tipo di azione richiesta.
Struttura richieste HTTP
Una richiesta HTTP è composta da:
- un metodo che indica l’azione richiesta
- una risorsa verso cui si sta compiendo l’azione
- zero o più header che caratterizzano la richiesta
- un body (opzionale) che contiene i dati da inviare alla risorsa
Un esempio di richiesta HTTP è il seguente:
GET /guide/laravel/index.php HTTP/2 Host: example.com Accept-Encoding: gzip, deflate, br Accept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
In questa richiesta, nella prima riga è indicato il metodo (GET) e la risorsa (/guide/laravel/index.php), le successive contengono gli header (nella forma Nome-Header: valore; notare, in particolare, l’header che permette di sapere verso quale host indirizzare la richiesta). Non è presente un body (che, vedremo tra poco, non avrebbe molto senso nelle richieste di tipo GET).
Metodi richieste HTTP
I metodi delle richieste HTTP identificano l’azione desiderata da compiere sulla risorsa. Anche se possono essere nomi, di solito sono indicati anche come verbi HTTP, proprio perché rappresentano l’azione da compiere.
Anche se, nell’esempio di comunicazione client-server che abbiamo presentato nella lezione precedente, abbiamo descritto un browser che chiede a un server alcune risorse da scaricare, bisogna considerare che il set completo dei metodi HTTP è pensato per permettere ai client di caricare o modificare risorse sul server.
Qui di seguito i metodi principali e il loro utilizzo desiderato.
GET
Richiede la risorsa indicata, che il server fornisce come body della risposta.
Poiché è usata per richiedere dati al server non dovrebbe includere un body.
HEAD
Ha lo stesso effetto della GET, ma la risposta del server è senza il body.
Può risultare utile da eseguire prima della GET per ottenere dal server informazioni sulla dimensione della risorsa, fornite nella risposta del server con l’header Content-Length.
POST
Invia dati al server usando la risorsa indicata.
Una richiesta POST viene, in genere, inviata tramite un form HTML e comporta una modifica sul server. In questo caso, il tipo di contenuto viene gestito dell’elemento <form> nella pagina. Valori possibili per il tipo di contenuto sono application/x-www-form-urlencoded e multipart/form-data.
Quando la richiesta POST viene inviata tramite un metodo diverso da un form HTML, ad esempio tramite XMLHttpRequest, il body può essere di qualsiasi tipo (per esempio application/json)
PUT
Crea una nuova risorsa o sostituisce la risorsa indicata con il body della richiesta.
A differenza del metodo POST, il metodo PUT è idempotente: chiamarlo una o più volte successivamente ha lo stesso effetto, mentre successive richieste `POST identiche possono avere effetti aggiuntivi (per esempio a ogni POST creo un nuovo ordine su un server di e-commerce).
DELETE
Elimina la risorsa indicata.
PATCH
Applica una modifica parziale alla risorsa.
Come il metodo POST può avere effetti aggiuntivi ogni volta che è chiamata su una risorsa (quindi non è idempotente).
A differenza del metodo PUT, nel body del metodo PATCH possono essere indicate delle “istruzioni” per modificare la risorsa.
Non tutti i server web implementano questo metodo per le varie risorse.
OPTIONS
Chiede le opzioni di comunicazione per la risorsa indicata (per esempio il server può rispondere quali altri metodi sono applicabili alla risorsa).
Riferimenti
Per maggiori approfondimenti su questi e altri metodi HTTP: