HTTP/1.1 versus HTTP/2 versus HTTP/3: transport, multiplexing, head-of-line blocking, headercompressie en versleuteling
De drie versies delen dezelfde HTTP-semantiek (RFC 9110), zoals methoden, statuscodes en headervelden; wat verschilt, is het formaat en het transport waarmee ze worden vervoerd. HTTP/1.1 (RFC 9112) verstuurt tekstberichten via TCP en geeft per verbinding de antwoorden één voor één terug. HTTP/2 (RFC 9113) deelt berichten op in binaire frames en multiplext meerdere streams over één TCP-verbinding. HTTP/3 (RFC 9114) gebruikt QUIC (RFC 9000), dat over UDP draait en het multiplexen van streams en de versleuteling met TLS 1.3 in het transport afhandelt. Zo wordt head-of-line blocking in TCP vermeden, waarbij het verlies van één pakket alle streams ophoudt.
| Kenmerk | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Specificatie | RFC 9112 (semantiek in RFC 9110, gedeeld door alle drie de versies) | RFC 9113 | RFC 9114 (QUIC is RFC 9000) |
| Transport | TCP | TCP | QUIC (draait over UDP) |
| Berichtformaat | Tekst: een requestregel en headervelden, elk op een eigen regel | Binaire frames | Binaire frames (op QUIC-streams) |
| Multiplexing | Geen: één verbinding behandelt één request en antwoord tegelijk, dus parallel ophalen vraagt meerdere verbindingen | Meerdere streams worden parallel over één TCP-verbinding verstuurd | Meerdere QUIC-streams worden parallel verstuurd; de streams worden door het transport beheerd |
| Head-of-line blocking | Treedt op in de HTTP-laag: op dezelfde verbinding kan het volgende antwoord pas worden verstuurd als het vorige klaar is (ook met pipelining komen antwoorden in de volgorde van de requests terug) | Opgelost in de HTTP-laag, maar omdat TCP bytes strikt op volgorde aflevert, laat het verlies van één pakket alle streams op de hertransmissie wachten | QUIC beheert de volgorde per stream, dus een verlies treft alleen de streams waarvan data verloren is gegaan |
| Headercompressie | Geen (de body kan worden gecomprimeerd, maar headers gaan als platte tekst) | HPACK (RFC 7541) | QPACK (RFC 9204), een aanpassing van HPACK die ook werkt als streams in een andere volgorde aankomen |
| Versleuteling | Optioneel: https gebruikt TLS, http wordt onversleuteld verstuurd | De specificatie definieert zowel een variant over TLS (h2) als een onversleutelde (h2c); over TLS is minstens TLS 1.2 vereist. Grote browsers ondersteunen HTTP/2 alleen over TLS | Verplicht: TLS 1.3 is in QUIC ingebouwd en er is geen onversleutelde modus |
| Round trips voor de verbindingsopbouw | Eén voor TCP, plus nog één met TLS 1.3, dus de request wordt na in totaal twee round trips verstuurd | Zoals bij HTTP/1.1 (twee round trips voor TCP en TLS) | QUIC combineert de transport- en cryptografische handshake in één round trip; 0-RTT, dat al data meestuurt in de allereerste verzending, is ook beschikbaar voor servers waarmee eerder verbinding is gemaakt |
| Als het netwerk verandert | Een TCP-verbinding wordt geïdentificeerd door de bron- en bestemmingsadressen en -poorten, dus als het IP-adres verandert, is een nieuwe verbinding nodig | Zoals bij HTTP/1.1 | QUIC identificeert verbindingen met connection-ID's, dus dezelfde verbinding kan doorgaan bij het overschakelen van draadloos LAN naar een mobiel netwerk (connection migration) |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.