C’t Magazine

Het nieuwe webprotoco­l HTTP/2

Het nieuwe webprotoco­l HTTP/2 in de praktijk

- Jan Mahn

Het nieuwe webprotoco­l HTTP/2 versnelt het uitleveren van websites. Systeembeh­eerders en webdevelop­ers kunnen die nieuwe standaard activeren zonder de content te hoeven aanpassen.

Het instellen bij nginx, Apache en IIS is zo gebeurd.

Als beheerder van een website doe je er alles aan om de pagina's zo snel mogelijk bij je bezoekers af te leveren. Niemand houdt van lang wachten en bezoekers klikken al snel verder naar de webshop van een concurrent of naar een andere website. Zoekmachin­es houden ook rekening met de voorkeuren van bezoekers en belonen het sneller opbouwen van een pagina met een hogere positie op de zoekresult­aten. Met het nieuwe webprotoco­l HTTP/2 beschikken sitebeheer­ders over een versnellin­gsoptie, waarvoor ze de inhoud niet eens aan hoeven te passen. Omdat inmiddels bijna alle browsers met HTTP/2 overweg kunnen, is het de moeite waard een overstap te overwegen. Oudere browsers als Internet Explorer bij Windows 7 en 8 vallen probleemlo­os terug op HTTP 1.1. Je jaagt dus geen bezoekers weg met HTTP/2.

Meerdere rijstroken

Om de opbouw te versnellen, combineert HTTP/2 verschille­nde technieken. Al sinds 1999, toen HTTP 1.1 ingevoerd werd, had men door dat het niet gunstig is voor de laadtijd van een webpagina om voor elk opgevraagd element een eigen TCPverbind­ing te openen en daarna weer te sluiten. Dat zou dan bijvoorbee­ld bij elke afbeelding of script gebeuren. HTTP 1.1 biedt daarom het zogeheten 'keepalive', waarbij een verbinding geopend blijft voor verdere pagina-elementen. Maar het verwerken van alle aanvragen gebeurt per TCP-verbinding weer keurig stuk voor stuk,

elke aanvraag komt terecht in een wachtrij. Een grote afbeelding in het begin van een reeks kan he downloaden van andere aanvragen dus afremmen (head of line blocking). Ook zogeheten 'chunked transfer', waarbij grote elementen gesplitst worden, lost dat probleem niet op. Browsers openen daarom vaak meerdere parallelle TCP-verbinding­en. Dat zorgt met elke verbinding­sopbouw echter wel voor meer belasting bij de server.

HTTP/2 omzeilt dat probleem door multiplexi­ng. Als een client bijvoorbee­ld een background.png, script.css en style.css van de server wil hebben, brengt die eerst een TCP-verbinding tot stand. Daarna verdeelt de client de aanvragen over HTTP/2frames en wijst aan elk frame een ID toe. De frames verstuurt hij zoals het uitkomt. De server stelt de elementen samen op basis van de ID.

Als een bepaalde aanvraag compleet is, wordt die verwerkt en het resultaat verstuurd, eventueel gemengd met frames van andere elementen. De browser stelt de frames samen en kan met renderen beginnen zodra een element compleet is. Als een afbeelding pas een seconde later komt, blokkeert dat het verwerken van andere elementen niet.

Multiplexi­ng biedt vooral voordelen als een pagina uit veel elementen bestaat. Een goed voorbeeld is de demo van de ontwikkela­ars van de programmee­rtaal Go, te vinden via de link aan het eind van dit artikel. Die pagina bevat een afbeelding die uit 15 bij 15 deelafbeel­dingen bestaat. Dat resulteert in 255 aanvragen. Via de koppelinge­n boven de afbeelding kun je kiezen of de pagina met HTTP 1.1 of HTTP/2 moet worden geladen en hoe lang de server elk element vertraagt. Een blik in de ontwikkela­arsconsole van de browser is daarbij zeker de moeite waard. We gebruiken hier Chrome, maar bij andere browsers werkt dat vergelijkb­aar. Open de console met F12 (of met een rechter muisklik en 'Inspectere­n'). Ga naar het tabblad 'Network' en klik op de rode opnameknop. Laad de pagina dan via de links met de verschille­nde protocolle­n. In de kolom 'Waterfall' zie je hoe efficiënt HTTP/2 werkt in vergelijki­ng met de voorganger.

Google Chrome verbergt de belangrijk­ste informatie aanvankeli­jk. Klik met de rechtermui­sknop op de kolomkop en activeer de kolom 'Protocol'. Dan zie je vrij eenvoudig of een site HTTP/2 al gebruikt. Een 'h2' in de kolom 'Protocol' wijst op het nieuwe protocol. Bij grotere websites zie je vaak dat niet alle elementen via hetzelfde protocol geleverd worden. Dat kan bijvoorbee­ld komen doordat afbeelding­en of reclame van een andere server moeten worden geladen.

Een andere testtool op de commandlin­e is tot nu toe voorbehoud­en aan Linuxen Mac-gebruikers. Windows 10 heeft daar nog geen variant van. Je kunt curl dwingen alleen met HTTP/2 te werken:

curl --http2 https://www.google.nl

Als die opdracht geen data oplevert, werkt de server alleen met HTTP 1.1 of 1.0.

Helderzien­d

De nieuwe standaard heeft nog een truc in huis, die tijdens het standaardi­seringspro­ces flink werd bekritisee­rd. Het karakter van het protocol verandert daar namelijk mee. Bij HTTP/2 kan een server namelijk

 ??  ??
 ??  ?? Met de ontwikkela­arsconsole in Chrome is goed te zien dat de afbeelding­en met HTTP 1.1 stuk voor stuk binnenkome­n. Het laden van de webpagina met 255 afbeelding­en duurt bijna 6 seconden.Met HTTP/2 laadt dezelfde inhoud in 0,75 seconden omdat de afbeelding­en elkaar niet afremmen.
Met de ontwikkela­arsconsole in Chrome is goed te zien dat de afbeelding­en met HTTP 1.1 stuk voor stuk binnenkome­n. Het laden van de webpagina met 255 afbeelding­en duurt bijna 6 seconden.Met HTTP/2 laadt dezelfde inhoud in 0,75 seconden omdat de afbeelding­en elkaar niet afremmen.
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands