HTTP (HyperText Transfer Protocol)
Il protocollo HTTP è il cuore della comunicazione su Internet ed è alla base del World Wide Web. È il protocollo utilizzato dai browser web per comunicare con i server e trasferire documenti ipertestuali, immagini, video e altri contenuti che costituiscono una pagina web.
Introduzione: Cos’è HTTP?
HTTP (HyperText Transfer Protocol) è un protocollo di comunicazione di livello applicazione progettato per trasferire contenuti tra un client (ad esempio, un browser web) e un server. La sua prima versione, HTTP/0.9, risale al 1990, mentre oggi le versioni più comuni sono:
- HTTP/1.1: Introdotta nel 1997, ancora ampiamente utilizzata.
- HTTP/2: Rilasciata nel 2015, offre prestazioni migliorate.
- HTTP/3: Basata sul protocollo QUIC (vedremo più avanti), introduce ulteriori ottimizzazioni per la velocità e la sicurezza. Ancora poco utilizzato.
HTTP e HTTPS
HTTP trasmette i dati in chiaro, il che lo rende vulnerabile a intercettazioni e attacchi. Per risolvere questo problema, è stato introdotto HTTPS (HTTP Secure), che combina HTTP con SSL/TLS per cifrare le comunicazioni.
Come funziona HTTP?
HTTP segue un modello richiesta-risposta, in cui il client invia una richiesta al server e il server risponde con i dati richiesti. Questo processo si ripete per ogni risorsa necessaria a costruire una pagina web (ad esempio, immagini, file CSS, script JavaScript).
Fasi principali di una comunicazione HTTP
- Connessione al server: Il client stabilisce una connessione al server utilizzando l’indirizzo IP e la porta 80 (o 443 per HTTPS) (vedremo più avanti cosa sono indirizzi IP e porte).
- Invio della richiesta HTTP: Il client invia una richiesta che specifica il metodo, il percorso della risorsa e altre informazioni utili.
- Risposta dal server: Il server elabora la richiesta e invia una risposta contenente il codice di stato e i dati richiesti (ad esempio, il file HTML della pagina).
- Chiusura o riutilizzo della connessione: In HTTP/1.1 e versioni successive, la connessione può essere riutilizzata per altre richieste, riducendo i tempi di latenza.
Struttura di una richiesta HTTP
Una richiesta HTTP è composta da tre parti principali:
-
Linea di richiesta Contiene:
- Metodo HTTP: Indica l’azione richiesta (es.
GET,POST). - Percorso della risorsa: Specifica il file o il servizio richiesto sul server (es.
/index.html). - Versione del protocollo: Esprime la versione di HTTP utilizzata (es.
HTTP/1.1).
GET /index.html HTTP/1.1 - Metodo HTTP: Indica l’azione richiesta (es.
-
Headers (intestazioni) Forniscono informazioni aggiuntive sulla richiesta, come:
- Tipo di contenuto accettato dal client (
Accept). - Informazioni sul client (
User-Agent). - Host richiesto (
Host).
Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0) Accept: text/html,application/xhtml+xml - Tipo di contenuto accettato dal client (
-
Corpo della richiesta (opzionale) Utilizzato principalmente nei metodi come
POSTper inviare dati al server (es. dati di un modulo).username=johndoe&password=1234
Struttura di una risposta HTTP
La risposta HTTP inviata dal server ha una struttura simile:
-
Linea di stato Contiene:
- Versione del protocollo: Indica la versione di HTTP utilizzata (es.
HTTP/1.1). - Codice di stato: Indica il risultato della richiesta (es.
200per successo,404per risorsa non trovata). - Messaggio di stato: Una descrizione testuale del codice di stato (es.
OK,Not Found).
HTTP/1.1 200 OK - Versione del protocollo: Indica la versione di HTTP utilizzata (es.
-
Headers Forniscono informazioni sulla risposta, come:
- Tipo di contenuto restituito (
Content-Type). - Dimensione dei dati (
Content-Length). - Impostazioni di caching (
Cache-Control).
Esempio:
Content-Type: text/html Content-Length: 1234 Cache-Control: no-cache - Tipo di contenuto restituito (
-
Corpo della risposta Contiene i dati richiesti, ad esempio un file HTML o un’immagine.
Metodi HTTP più comuni
I metodi HTTP definiscono l’azione che il client vuole eseguire sul server. Ecco i principali:
- GET: Richiede una risorsa (es. una pagina HTML). Non invia dati nel corpo della richiesta.
- POST: Invia dati al server (es. compilazione di un modulo). I dati sono contenuti nel corpo della richiesta
- PUT: Aggiorna o crea una risorsa sul server.
- DELETE: Elimina una risorsa specifica.
- HEAD: Simile a
GET, ma restituisce solo le intestazioni, senza il corpo della risposta.
Sono presenti molti metodi HTTP anche se la maggior parte dei sistemi gestiscono solamente GET e POST che riultano essere i più utilizzati
| Richiesta GET | Richiesta POST |
|---|---|
![]() | ![]() |
Codici di stato HTTP
I codici di stato indicano il risultato della richiesta HTTP. Sono divisi in categorie:
- 1xx (Informativi): La richiesta è stata ricevuta, ma non completata.
- 2xx (Successo): La richiesta è stata completata con successo.
200 OK: Risorsa trovata e restituita.
- 3xx (Redirect): Ulteriori azioni sono necessarie.
301 Moved Permanently: La risorsa è stata spostata in modo permanente.
- 4xx (Errore del client): La richiesta contiene un errore.
404 Not Found: La risorsa richiesta non è stata trovata.
- 5xx (Errore del server): Il server ha incontrato un problema.
500 Internal Server Error: Errore interno del server.
Vantaggi di HTTP/2 e HTTP/3
Le nuove versioni di HTTP introducono miglioramenti significativi:
- HTTP/2:
- Supporta la multiplexing, permettendo di inviare più richieste simultaneamente sulla stessa connessione.
- Usa la compressione degli header per ridurre la dimensione delle richieste.
- HTTP/3:
- Utilizza il protocollo QUIC basato su UDP per migliorare la velocità e la resilienza.
- Riduce la latenza nelle connessioni TLS.
Come testare HTTP
-
Strumenti del browser
- Apri gli strumenti per sviluppatori (
F12) e vai alla scheda Network per analizzare le richieste e risposte HTTP.
- Apri gli strumenti per sviluppatori (
-
Comando curl
- Usa
curlper inviare richieste HTTP da terminale.curl -I https://www.google.com
utilizzando il comando con
-Irestituisce solo le intestazioni e non il contenuto della risposta. Utilizzado il comando senza-Iverrebbe restituito tutto il contenuto della risposta. - Usa
-
Postman o Httpie
- Un tool potente per creare, inviare e analizzare richieste HTTP personalizzate.
- Postman
- Httpie (gratuito)
-
Wireshark
- Cattura e analizza il traffico HTTP per vedere le comunicazioni dettagliate tra client e server.

