Introduzione

Come già discusso, il protocollo HTTP/1.1 ha introdotto la possibilità di poter effettuare più richieste GET in successione tramite una singola connessione TCP. Tuttavia, tale modifica ha introdotto ulteriori problematiche:

  • Il server risponde alle richieste GET nell’ordine in cui vengono effettuate (First Come First Served (FCFS)).
  • Un oggetto di piccole dimensioni potrebbe dover attendere la trasmissione di oggetti di grandi dimensioni richiesti prima di esso (blocco head-of-line (HOL)).
  • La perdita di un segmento TCP causa lo stallo del trasferimento di un oggetto

Per risolvere tali problematiche, il protocollo HTTP/2 introduce una maggiore flessibilità al server nell’invio di oggetti al client:

  • L’ordine di trasmissione degli oggetti richiesti viene stabilito in base alla priorità dell’oggetto specificata dal client.
  • Gli oggetti vengono divisi in frame, schedulati in modo da mitigare il blocco HOL.
  • Possono essere inviati più oggetti contemporaneamente (multiplexing).

Il protocollo HTTP/3, invece, risolve le ultime problematiche rimanenti all’interno del protocollo HTTP/2, tramite l’aggiunta di controlli sulla sicurezza, sugli errori e sulla congestione per oggetto, utilizzando il protocollo QUIC (basato su UDP) al posto del protocollo TCP.