Sobes.tech
Junior

Parli delle versioni di HTTP e delle loro differenze.

sobes.tech AI

Risposta dell'AI

Versioni principali di HTTP:

  • HTTP/0.9: Versione di base per la trasmissione di semplici documenti HTML. Supportava solo il metodo GET, senza intestazioni o stati di risposta.
  • HTTP/1.0: Introdotta il supporto per intestazioni (Content-Type, User-Agent), metodi POST e HEAD, stati di risposta. La connessione veniva chiusa dopo ogni richiesta/risposta.
  • HTTP/1.1: Miglioramenti significativi:
    • Connessioni persistenti - riutilizzo della connessione TCP per più richieste.
    • Pipelining - invio di più richieste senza attendere la risposta precedente (mal implementato e poco usato).
    • Host virtuali (intestazione Host).
    • Richieste GET parziali (intestazione Range).
    • Caching (Cache-Control, ETag, Last-Modified).
    • Metodi PUT e DELETE.
  • HTTP/2: Protocollo basato su SPDY di Google. Differenze principali:
    • Protocollo binario invece di testo - parsing più efficiente.
    • Multiplexing - trasmissione parallela di più richieste/risposte su una singola connessione TCP. Elimina il problema di "head-of-line blocking" in HTTP/1.1 pipelining.
    • Compressione degli intestazioni (HPACK) - riduzione delle dimensioni dei dati trasmessi.
    • Prioritizzazione (Server Push) - il server può inviare risorse che probabilmente saranno necessarie al client prima che le richieda.
  • HTTP/3: Basato su UDP (con QUIC - Quick UDP Internet Connections) invece di TCP. Focalizzato sul miglioramento delle prestazioni, specialmente in reti instabili:
    • Eliminazione del "head-of-line blocking" a livello di connessione TCP. Se un pacchetto viene perso in TCP, tutti i pacchetti successivi sono bloccati fino alla sua ritrasmissione. In QUIC (e HTTP/3), solo il flusso a cui appartiene il pacchetto perso viene bloccato.
    • Stabilimento di connessione più rapido (0-RTT o 1-RTT).
    • QUIC include i propri meccanismi di controllo del flusso e affidabilità.

Differenze principali nella tabella:

Caratteristica HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protocollo TCP TCP TCP UDP (QUIC)
Formato Testo Testo Binario Binario
Connessione di default Temporanea Permanente Permanente (multiplexing) Permanente (Streams QUIC)
Multiplexing No Imitazione (Pipelining)
Compressione intestazioni No No HPACK QPACK (in QUIC)
Server Push No No
Blocco HOL (TCP) Sì (a livello di richiesta) Sì (a livello di richiesta) Sì (a livello di connessione) No (a livello di flusso)

Esempio di richiesta in HTTP/1.1:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*

Esempio di richiesta in HTTP/2 (concettualmente, poiché è binario):

// Richiesta 1: Ottenere /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Richiesta 2: Ottenere /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...trasmesse in parallelo su una singola connessione