HTTP: Il Protocollo che Alimenta il World Wide Web — Come Funziona
Il **Hypertext Transfer Protocol (HTTP)** è il protocollo di livello applicazione che definisce come client (browser, app) e server comunicano sul World Wide Web. È il linguaggio del web.
Modello Fondamentale: Richiesta–Risposta
HTTP segue un ciclo **client-server, senza stato, richiesta-risposta**:
- Client (User Agent) avvia una **connessione TCP** (di solito porta 80 per HTTP, 443 per HTTPS) all'IP del server (risolto tramite DNS dall'URL).
- Il client invia una Richiesta HTTP:
GET /article/how-http-works HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 ... Accept: text/html,application/xhtml+xml Accept-Language: en-US,en;q=0.9 Cookie: session_id=abc123 - Il server elabora la richiesta (instrada al gestore, interroga DB, renderizza template, controlla autenticazione).
- Il server invia una Risposta HTTP:
HTTP/1.1 200 OK Date: Mon, 27 May 2024 12:00:00 GMT Server: nginx/1.24.0 Content-Type: text/html; charset=UTF-8 Content-Length: 14523 Cache-Control: private, max-age=0 Set-Cookie: session_id=abc123; HttpOnly; Secure ...contenuto pagina... - Il client riceve, analizza, renderizza. Se l'HTML fa riferimento ad altre risorse (CSS, JS, immagini, font), vengono avviate **nuove richieste** (spesso in parallelo).
- La connessione viene riutilizzata (Keep-Alive) o chiusa.
Metodi HTTP Chiave (Verbi)
| Metodo | Scopo | Idempotente? | Sicuro? |
|---|---|---|---|
| GET | Recupera risorsa | Sì | Sì |
| POST | Invia dati (form, API) | No | No |
| PUT | Sostituisce risorsa completamente | Sì | No |
| PATCH | Aggiornamento parziale | No* | No |
| DELETE | Rimuove risorsa | Sì | No |
| HEAD | Solo intestazioni (nessun corpo) | Sì | Sì |
| OPTIONS | Descrive metodi consentiti (CORS) | Sì | Sì |
Codici di Stato: Il Risultato a 3 Cifre
- 1xx Informativo: 100 Continue
- 2xx Successo: 200 OK, 201 Created, 204 No Content
- 3xx Redirezione: 301 Moved Permanently, 302 Found, 304 Not Modified (cache)
- 4xx Errore Client: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests
- 5xx Errore Server: 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
Evoluzione: HTTP/1.1 → HTTP/2 → HTTP/3
| Versione | Anno | Miglioramenti Chiave |
|---|---|---|
| HTTP/1.1 | 1997 | Connessioni persistenti, encoding a blocchi, header Host (hosting virtuale), pipelining (difettoso) |
| HTTP/2 (h2) | 2015 | **Framing binario**, **multiplexing** (flussi paralleli su 1 connessione TCP), compressione header (HPACK), server push, priorizzazione. Richiede TLS (h2) nella pratica. |
| HTTP/3 (h3) | 2022 | **QUIC (UDP)** invece di TCP: **stretta di mano 0-RTT**, niente head-of-line blocking, TLS 1.3 integrato, migrazione connessione (cambio IP). |
HTTPS: HTTP + TLS
**Non è un protocollo separato.** HTTP stratificato sopra **TLS (Transport Layer Security).** Cripta richiesta/risposta, autentica il server (certificato), garantisce integrità. **Standard oggi**—i browser contrassegnano HTTP come "Non Sicuro".
Perché Senza Stato? Scalabilità.
Nessuna memoria di sessione lato server tra le richieste. Lo stato gestito tramite **cookie, token (JWT), archiviazione lato client, o archivi sessione lato server (Redis) chiave per cookie.** Abilita scalabilità orizzontale (aggiungi server dietro load balancer).
La semplicità di HTTP, l'estensibilità (intestazioni, metodi) e la natura senza stato hanno reso il web scalabile a miliardi di dispositivi. QUIC/HTTP/3 ora affronta l'ultimo collo di bottiglia: il head-of-line blocking di TCP.