Bij LinQhost zijn we constant bezig om te kijken hoe zaken veiliger en sneller kunnen. Na een lange periode van testen hebben we het gebruik van HTTP/2 op al onze HPW servers geactiveerd. Alle nieuwe websites zullen vanaf vandaag standaard met HTTP/2 wordt uitgeleverd. Bestaande websites zullen wij de komende tijd aanpassen zodat deze ook gebruik maken van HTTP/2.

HTTP/2

Tot op heden wordt er gebruik gemaakt van HTTP/1 voor de communicatie tussen browser (u) en de webserver. Dit protocol heeft altijd goed gewerkt, maar begint tegen zijn limieten aan te lopen. Zo kan er per aanvraag (bijvoorbeeld laden van een plaatje) maar één verbinding gelijktijdig gemaakt worden naar de webserver. Per verzoek moet er een compleet nieuwe verbinding worden opgebouwd met de webserver. Let wel, een gemiddelde website kan zo’n 45 aanvragen bevatten en hier moet elke keer weer een verbinding voor worden opgebouwd (keep-alive even buiten beschouwing gehouden). De meeste browsers zullen echter proberen om 5-10 parallelle processen te draaien zodat de laadtijd toch enigszins acceptabel blijft.

Om deze beperkingen aan te pakken heeft Google in 2012 het SPDY  protocol ontwikkeld. SPDY is de basis geweest van wat nu HTTP/2 is geworden. Met HTTP/2 is het mogelijk om per opgebouwde verbinding meerdere aanvragen (asynchroon) naar de webserver te sturen/ontvangen. De verbindingen wordt altijd met TLS opgebouwd. Voor het gebruik van HTTP/2 is een SSL certificaat dan ook verplicht. Verder worden alle verbindingen via GZIP ingepakt (gecomprimeerd) om deze zo optimaal mogelijk te benutten.

Tijdens het testen is gebleken dat vooral sites met veel aanvragen (bijvoorbeeld veel afbeeldingen) veel voordeel van HTTP/2 hebben, met soms tot wel 45% snelheidswinst!

Chrome

Tijdens onze testperiode werkte HTTP/2 prima onder Chrome en hadden we hier geen problemen mee. Echter kregen we de melding van een oplettende klant dat met een recente versie van Chrome (build 51) alle HTTP/2 verbindingen gedowngraded werden naar een HTTP/1 verbinding. Bij het kopje “Technische uitdagingen” leggen wij uit waarom dit zo was. Het goede nieuws is dat ook Chrome gebruikers nu volledig gebruik kunnen maken van HTTP/2!

Technische uitdagingen

Zoals u heeft kunnen lezen was er een probleem met Chrome 51 in combinatie met onze webservers (NGINX). De oorzaak hiervan is redelijk technisch. Onder SPDY (dus voorloper HTTP/2) werd gebruik gemaakt van NPN een onderdeel om een HTTP/1 verbinding naar SPDY te upgraden. NPN is onderdeel van de OpenSSL (crypto) software die aanwezig is op onze servers.

Bij het vastleggen van de HTTP/2 standaard is er tevens een opvolger voor het NPN protocol gekomen: namelijk ALPN! OpenSSL heeft ALPN support in de laatste versie zitten. Het probleem is echter dat bijna geen enkele professionele Linux distributie systemen deze versie bevat; ook het door ons gebruikte RedHat 7 niet.

Google heeft in Chrome 51 alle SPDY onderdelen verwijderd, inclusief ondersteuning voor NPN. Alleen ALNP wordt op dit moment ondersteund. Doordat onze OpenSSL software geen support had voor ALPN werkte HTTP/2 niet onder de laatste versies van Chrome.

Om dit op te lossen compileren wij onze webserver software niet langer met de systeemversie van OpenSSL maar met een specifieke versie van OpenSSL welke wel ALPN ondersteund.