HTTP/2: Wat is het, en wat kunnen we ervan verwachten?

24 maart, 2014 (10:25)
Rob (Hosting in Nederland)
0 reacties

Het Hypertext Transfer Protocol (HTTP) is cruciaal voor de werking van het wereldwijde web zoals we dat kennen. Zo bepaalt het bijvoorbeeld hoe een webbrowser (de cliënt) kan communiceren met een (web)server, zodat zij elkaar begrijpen en bepaalde content, zoals de inhoud van deze pagina, kunnen uitwisselen.

Diagram van HTTP en SPDY

In eerste instantie ging dat, zoals de naam suggereert, exclusief om hypertext: gestructureerde tekst die door middel van de welbekende hyperlinks naar andere teksten kan verwijzen. Tegenwoordig maken miljarden apparaten (en mensen) gebruik van het protocol om niet alleen tekst maar ook afbeeldingen, audio, video en allerlei andere gegevens uit te wisselen.

We maken daarbij doorgaans gebruik van HTTP/1.1, de versie die sinds 1999 de standaard is. Ons huidige protocol stamt dus uit een tijd waarin mobiele telefoons nog monochrome schermen en zichtbare antennes hadden, Netscape een populaire webbrowser was, en de euro als munteenheid formeel geïntroduceerd werd.

HTTP/1.1: dienstbaar, maar verouderd

Ondanks alle ontwikkelingen die het wereldwijde web dit millennium heeft doorgemaakt, is HTTP vijftien jaar onveranderd gebleven. Dat brengt de nodige problemen met zich mee.

Waar webpagina's in 1999 nog veelal tekst en afbeeldingen bevatten van hooguit enkele tientallen kilobytes, bestaat een gemiddelde webpagina (volgens HTTP Archive) tegenwoordig uit bijna honderd elementen, en is een totale grootte van meer dan anderhalf megabyte niet ongewoon.

Elke verbinding tussen de cliënt en de server kan slechts één element tegelijk overbrengen, oftewel één afzonderlijke HTTP-transactie. Zelfs in moderne browsers, die per domeinnaam van gemiddeld 6-8 parallelle verbindingen gebruik kunnen maken, betekent dit dat een pagina die honderd elementen bevat, opgedeeld moet worden in 12-16 'sessies' waarin elk 6-8 elementen tegelijkertijd kunnen worden gedownload.

Zo ontstaat er een lange wachtrij: de browser kan immers pas beginnen met het downloaden van een nieuw element zodra er een verbinding vrij komt. Vóór HTTP/1.1 was het bovendien niet mogelijk om een verbinding te hergebruiken, en moesten de cliënt en server na elk afgehandeld verzoek de onderhandelingen weer opnieuw opstarten alvorens een volgend element uitgewisseld kon worden.

TCP, handshakes en de beperkingen van HTTP/1.1

Die onderhandelingen vinden plaats met behulp van het Transmission Control Protocol (TCP), een belangrijk protocol dat het transport van gegevens tussen twee computers in een netwerk (zoals het internet) mogelijk maakt, en er tevens voor zorgt dat daarbij geen gegevens verloren gaan.

TCP handshake

Het aanmaken van een TCP-verbinding, waar een HTTP-verzoek gebruik van maakt, is relatief tijdrovend. Om er zeker van te zijn dat de communicatie tussen beide computers goed kan verlopen, vindt er namelijk eerst een zogeheten handshake plaats.

In deze handshake klopt de cliënt aan bij de server met een verzoek tot synchronisatie (SYN). De server reageert door eenzelfde verzoek (SYN) naar de cliënt te sturen, en laat tevens weten dat een verbinding mogelijk is (ACK, van acknowledge). De cliënt bevestigt op haar beurt het synchronisatieverzoek van de server, en de TCP-verbinding is een feit.

Dit lijkt wellicht geen tijdrovend proces, maar voor elk onderdeel van de handshake moet een pakketje gegevens van de ene naar de andere computer verstuurd worden. Hoe groter de afstand tussen beide computers, hoe langer dit duurt, een gegeven dat grotendeels beperkt wordt door de snelheid van het licht. Versies 0.9 en 1.0 van HTTP waren bovendien niet in staat om TCP-verbindingen in stand te houden (keepalive geheten), en moesten voor elk HTTP-verzoek een geheel nieuwe TCP-verbinding opzetten, om deze daarna gelijk weer af te breken.

HTTP/1.1 ondersteunt wel keepalives, waardoor TCP-verbindingen hergebruikt kunnen worden voor het verwerken van meerdere HTTP-verzoeken. Het aantal tijdrovende handshakes wordt zo tot een minimum beperkt. Het is tegenwoordig dan ook vooral het feit dat er per verbinding slechts één HTTP-verzoek tegelijk kan worden verwerkt, wat een knelpunt veroorzaakt.

Met deze beperking van HTTP wordt op allerlei creatieve wijzen omgegaan. Het aantal HTTP-verzoeken en benodigde TCP-verbindingen kan bijvoorbeeld beperkt worden door elementen samen te voegen (zoals afbeeldingen in CSS sprites), of door ze vanaf andere (sub)domeinen te laden (domain sharding) waardoor de beperking van de maximaal zes tot acht verbindingen per domeinnaam omzeild wordt.

De komst van SPDY

Elk van de genoemde (en andere) manieren om met de beperkingen van HTTP/1.1 om te gaan, moet als noodoplossing worden beschouwd. Het knelpunt zit immers ingebed in het protocol. Om die reden is een ontwikkelteam van met name Google enkele jaren geleden begonnen met het definiëren van enkele aanpassingen aan HTTP, die de huidige nadelen zoveel mogelijk moeten opheffen.

Dit project heeft de naam SPDY gekregen, veelal uitgesproken als speedy. Het doel ervan was niet om HTTP te vervangen, maar om de manier aan te passen waarop HTTP-gegevens geëncodeerd en verzonden worden, en zodoende het internet sneller te maken. Aan het protocol, ofwel de manier van communiceren, verandert in feite dan ook niets. SPDY is een geoptimaliseerd kader voor HTTP, met drie belangrijke basiseigenschappen:

RSS feed
Over deze blog

Op dit weblog schrijven we regelmatig over nieuws en trends rondom (web)hosting, website-ontwikkeling en technologie.

Archief
Bijdrage leveren?

We verwelkomen bijdragen van gast-auteurs. Heb je een voorstel? Neem dan vrijblijvend contact met ons op.