Comprendere le richieste HTTP: struttura, metodi ed esempi
HTTP è la chiave della comunicazione su Internet. I metodi del protocollo HTTP permettono ai client di inviare richieste ai server e ai server di inviare risposte. Ogni sito web sul World Wide Web utilizza richieste HTTP, quindi è essenziale comprenderle.
Questo articolo analizza il concetto di richieste HTTP, la loro struttura, i metodi più comuni e alcuni esempi pratici per comprendere meglio il funzionamento del web.
Che cos’è una richiesta HTTP? Copia link
Una richiesta HTTP è un messaggio in cui un client — ad esempio un browser — chiede a un host presente su un server una risorsa specifica. I client utilizzano gli URL nelle richieste HTTP per indicare al server quali risorse desiderano recuperare.
Componenti di una richiesta HTTP Copia link
Ogni richiesta HTTP è composta da tre parti:
-
la request line (riga di richiesta)
-
gli header
-
il message body (corpo del messaggio)
Request Line Copia link
La request line è la prima riga di una richiesta HTTP. Serve per iniziare un’azione sul server. Indica il metodo HTTP e la versione del protocollo. Include anche un’URI o un URL.
Esempio:
GET /index.html HTTP/1.1
Header Copia link
Gli header seguono immediatamente la request line.
Forniscono informazioni aggiuntive dal client al server, come:
-
nome dell’host
-
informazioni sul browser (User-Agent)
-
preferenze linguistiche
-
tipi di contenuto accettati
Il server utilizza questi dati per identificare il browser e il sistema operativo del client. Gli header HTTP sono case-sensitive e seguono la sintassi Nome: Valore.
Esempio di header:
Host: example.com
User-Agent: Mozilla/5.0 (...)
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Message Body Copia link
Il corpo del messaggio è utilizzato per inviare dati al server. È facoltativo: non tutte le richieste HTTP lo includono. Tipicamente viene utilizzato con i metodi POST e PUT. Il server utilizza i dati ricevuti per processare la richiesta.
Metodi HTTP comuni Copia link
Una richiesta HTTP connette un client a un server per svolgere diverse operazioni:
-
recuperare una risorsa
-
inviare dati
-
aggiornare contenuti
-
eliminare risorse
I metodi più diffusi sono i seguenti:
GET — Recuperare risorse Copia link
La richiesta GET chiede al server una risorsa. Ogni volta che visiti una pagina web, il browser invia una richiesta GET per ottenere i dati necessari.
Caratteristiche:
-
cacheable
-
safe
-
idempotente
GET non modifica il contenuto del server, permette solo di leggerlo.
POST — Inviare dati Copia link
POST viene utilizzato per inviare dati al server, ad esempio quando si compila un modulo o si carica un file.
Il body contiene i dati inviati. Più richieste POST identiche possono creare risorse multiple sul server.
PUT — Aggiornare risorse Copia link
PUT funziona in modo simile a POST, ma serve per aggiornare dati esistenti.
Differenze principali:
-
POST = crea nuovi dati
-
PUT = aggiorna dati esistenti
PUT è idempotente, quindi eseguire più volte la stessa richiesta produce sempre lo stesso risultato.
DELETE — Rimuovere risorse Copia link
DELETE chiede al server di eliminare una risorsa.
Se l’operazione va a buon fine, il server invia una conferma. DELETE è idempotente.
Che cos’è una risposta HTTP? Copia link
Una risposta HTTP è il messaggio che il server invia al client dopo aver ricevuto una richiesta.
Ha una struttura simile a quella della richiesta, con tre parti:
-
status line
-
header
-
message body
Status Line Copia link
Indica:
-
la versione HTTP utilizzata
-
il codice di stato
-
il messaggio corrispondente
Header Copia link
Contengono informazioni quali:
-
data e ora della risposta
-
tipo di contenuto inviato
-
dettagli del server
-
istruzioni di caching
Message Body Copia link
Contiene i dati inviati dal server, come:
-
HTML
-
JSON
-
XML
-
immagini
-
file
Codici di stato HTTP e significato Copia link
I codici HTTP indicano il risultato della richiesta. Ogni codice ha tre cifre; la prima indica la categoria.
|
Codice |
Descrizione |
|
1xx |
Risposte informative |
|
2xx |
Successo — richiesta elaborata correttamente |
|
3xx |
Reindirizzamento — sono necessarie ulteriori azioni |
|
4xx |
Errori lato client |
|
5xx |
Errori lato server |
HTTP Header e la loro importanza Copia link
Gli header sono fondamentali per la comunicazione client–server. Essi forniscono informazioni usate per diverse funzioni web.
Identificazione dell’host Copia link
Indica quale dominio è servito dal server.
Caching Copia link
Cache-Control e Expires gestiscono come memorizzare le risposte.
Gestione dei cookie Copia link
Set-Cookie e Cookie gestiscono le sessioni utente.
Sicurezza Copia link
Esempi:
-
Authorization —
autenticazione -
Content-Security-Policy —
protezione contro XSS
Controllo della risposta Copia link
Gli header indicano se la richiesta ha avuto successo o no.
Esempi pratici di richieste HTTP Copia link
Questi esempi utilizzano Python e la libreria requests.
GET Copia link
import requests
response = requests.get("https://api.example.com/data",
params={"param1": "value1", "param2": "value2"})
print(response.status_code)
print(response.json())
POST Copia link
import requests
url = "https://api.example.com/users"
data = {
"username": "newuser",
"email": "newuser@example.com",
"password": "securepassword"
}
response = requests.post(url, json=data)
if response.status_code == 201:
print("User created successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
PUT Copia link
import requests
url = "https://api.example.com/users/123"
data = {
"username": "updateduser",
"email": "updateduser@example.com"
}
response = requests.put(url, json=data)
if response.status_code == 200:
print("User updated successfully:", response.json())
else:
print("Error:", response.status_code, response.text)
DELETE Copia link
import requests
url = "https://api.example.com/users/123"
response = requests.delete(url)
if response.status_code == 204:
print("User deleted successfully.")
else:
print("Error:", response.status_code, response.text)
Conclusione Copia link
Le richieste HTTP svolgono un ruolo fondamentale nelle interazioni web. È quindi essenziale comprendere i vari metodi e il loro funzionamento. Scegliere il metodo più adatto garantisce una comunicazione fluida e migliora l’efficienza delle applicazioni web.