HTTP/2 en HTTP/3: praat je site al v3?
Op het moderne web draaien drie HTTP-versies — 1.1, 2 en 3 — en de interessante vraag is niet welke versie je server ondersteunt, maar welke de browser van je bezoeker werkelijk onderhandelde. Dat gebeurt per verbinding, per plek en per browser: een site die HTTP/3 aankondigt kan een bezoeker lang HTTP/2 laten antwoorden, en een CDN beslist per plaats.
De drie versies verschillen in hoe ze gesprekken dragen, niet in wat ze zeggen. HTTP/1.1 doet één vraag en antwoord na elkaar; HTTP/2 vlecht alle bronnen van een pagina door één verbinding; HTTP/3 verlegt de hele handel naar QUIC — UDP met eigen regels — en dat betaalt zich precies waar HTTP/2 struikelt: op verbindingen die pakketten kwijtraken en op veel parallelle vragen.
Begin bij de HTTP/3- en HTTP/2-probe: jouw browser vraagt het adres drie keer op jóuw verbinding en laat zien welk protocol hij onderhandelde — waar hij dat prijsgeeft — per monster met reactietijd, en de ALPN-handshake van onze server meet hetzelfde adres vanaf ons eigen adres. Wat je meet is wat déze browser op déze verbinding meet, plus wat onze server op de zijne onderhandelde.
1. Wat de versies onderscheidt
HTTP/1.1 beantwoordt per verbinding één vraag tegelijk, en omdat een browser per origin zo’n zes verbindingen opent, krijgt een pagina met veel bronnen een wachtrij: het langzaamste script blokkeert het volgende request dat klaar staat — head-of-line blocking. HTTP/2 breekt die rij: één verbinding, alle bronnen door elkaar, headers gecomprimeerd. Voor een normale pagina met veel bronnen is dat de grootste winst van de hele lijst.
HTTP/3 behoudt de betekenis van HTTP/1.1 en 2 maar verplaatst het transport van TCP naar QUIC, met altijd TLS 1.3 erin — een apart verhaal in TLS: wat is er nog open. De winst zit in verlies: omdat QUIC niet eist dat élk pakket op volgorde aankomt, blokkeert een kwijtgeraakt pakket niet meer de hele verbinding, en een nieuwe verbinding staat sneller. Voor één rustig request vanaf een rustig adres is het verschil vaak onhoorbaar.
2. Hoe een browser het weet: ALPN en Alt-Svc
Tijdens de TLS-handshake spreken browser en server via ALPN af welke protocol de verbinding spricht — h2 of http/1.1 voor TCP-verbindingen, h3 voor een QUIC-verbinding op hetzelfde adres. Die keuze valt vóór het eerste byte HTTP, dus is ze meetbaar zonder iets van de inhoud te lezen. Of de browser dat ook aan de pagina meldt, is een tweede vraag: Chrome en Chrome-achtige browsers kennen response.protocol niet — daarom meet de probe de handshake van onze server zelf, vanaf ons eigen adres.
HTTP/3 wordt meestal ontdekt in plaats van ingetypt: een server kondigt h3 aan via de Alt-Svc-header, en de browser probeert QUIC bij een volgend bezoek. Dus kan het eerste bezoek nog via HTTP/2 lopen terwijl het tweede al HTTP/3 spricht — daarom neemt de probe drie monsters: één verbinding houdt haar eenmaal gekozen protocol, en nieuwe verbindingen laten zien wat werkelijk beschikbaar is.
3. Meet op je eigen verbinding
De probe meet met de fetch van je eigen browser — geen headers en geen inhoud, alléén de uitkomst van de verbinding en de tijd, en het protocol alleen waar de browser het de pagina prijsgeeft. Daarom staat er naast de browserrij ook een handshake-rij: die meet hetzelfde adres vanaf onze eigen server. Taal van de eerlijkheid: in welk browser je meet doet ertoe, want oudere browsers kennen HTTP/3 via fetch nog niet, en dan is "niet gemeten" geen "niet aanwezig". Herhaal de meet in een recente browser of vanaf een andere plek voordat je een oordeel trekt, en onthoud dat een CDN per plek kan kiezen.
En er is de serverkant naast de browserkant: de webscan meldt de HTTP-versie waarmee je site aan onze server antwoordt, als bevinding met advies; de SSL-test toont welke TLS-versies het adres nog open heeft — want h3 zonder moderne TLS bestaat niet.
4. Wanneer v3 zich betaalt — en wanneer niet
HTTP/3 betaalt zich waar pakketten verloren gaan en verbindingen veel zijn: mobiele netwerken, streams, veel parallelle vragen, bezoekers in beweging. HTTP/2 is voor een gewone pagina op een stabiele verbinding al genoeg — de overstap naar v3 is geen cijfer dat hoger kan, het is een keuze over wat voor bezoekers je hebt. En bij managed hosting of een CDN beslist die partij voor je, per plek.
Meet voordat je kiest: drie monsters op de probe, per monster het onderhandelde protocol; vind je http/1.1, kijk dan eerst naar welke TLS en welke hosting je werkelijk draait (TLS: wat is er nog open is de laag eronder) voordat je op zoek gaat naar een QUIC-schakelaar.