Sobes.tech
Middle

Qual è la differenza tra HTTP/1 e HTTP/2?

sobes.tech AI

Risposta dell'AI

Principali differenze:

  • Multiplexing (Multiplexing). HTTP/2 consente di inviare e ricevere più richieste e risposte contemporaneamente attraverso un'unica connessione TCP. HTTP/1.1 richiedeva una connessione separata per ogni richiesta/risposta (eccetto nei casi in cui si utilizzava il meccanismo di pipelining, con limitazioni).
  • Compressione degli header. HTTP/2 utilizza la compressione degli header tramite l'algoritmo HPACK per ridurne le dimensioni e la quantità di dati trasmessi. In HTTP/1.1, gli header vengono inviati in formato testuale.
  • Prioritizzazione dei flussi. In HTTP/2, il client può indicare priorità per diversi flussi (richieste/risposte), permettendo al server di ottimizzare l'ordine di consegna dei dati. HTTP/1.1 non ha questo meccanismo.
  • Push del server. HTTP/2 permette al server di inviare risorse al client prima che queste vengano richieste, basandosi sull'ipotesi della loro necessità per la visualizzazione della pagina. In HTTP/1.1, il client deve richiedere esplicitamente ogni risorsa.
  • Formato dei frame. HTTP/2 trasmette i dati in formato binario (frame), facilitando l'analisi e aumentando l'efficienza rispetto al formato testuale di HTTP/1.1.

Confronto in tabella:

Caratteristica HTTP/1.1 HTTP/2
Connessione Una connessione per richiesta (senza pipelining) Una connessione per più flussi
Multiplexing No (o limitato dal pipelining)
Compressione degli header No HPACK (compressione binaria)
Prioritizzazione dei flussi No
Push del server No
Formato dei dati Testo Binario (frame)
Head-of-Line Blocking Presente Parzialmente risolto tramite multiplexing

Esempio di richiesta in HTTP/1.1:

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

Esempio di rappresentazione parziale dei dati in HTTP/2 (lo scambio di frame è più complesso e non viene mostrato così facilmente):

// In HTTP/2, l'interazione avviene a livello di frame (HEADERS, DATA, ecc.),
// che sono binari e nascosti all'utente a livello di applicazione.
// È difficile rappresentarli in testo semplice solo a scopo illustrativo.
// Gli header vengono compressi e trasmessi nel frame HEADERS.
// Il corpo della risposta viene trasmesso nei frame DATA.