10% av alla sajter använder idag HTTP/2. Resterande 90% använder HTTP1.1, ett protokoll som byggdes på 90-talet. I en tid då vi använde webben på ett helt annat sätt än vad vi gör idag. Webben syftade främst till att exponera information och länka dig vidare till annat matnyttigt. Gärna med några snygga .gif-ar eller kanske någon detalj som animerats med javascript. Idag är webbsajter otroligt mycket mer: affärssystem, internetbank, handels- och annonsplats, e-handel, sociala medier, nyheter, en nästintill skrämmande kartläggningsapparat om dina personliga preferenser för att öka exponering mot annonsörer. På samma protokoll som i slutet av 90-talet. Något av det som förändrats sedan dess, och som gör HTTP1.1 problematiskt, är att vi bygger sajter med massor av bilder, ikoner, javascript-filer, css-filer och externa resurser. Idag bygger vi också system som kräver högre säkerhet.
Genom åren har både webbläsare och utvecklare kämpat med att överbrygga begränsningarna i HTTP1.1. Webbläsarna exempelvis genom att med tiden tillåta fler öppna TCP connections till samma domän. Och programmerarna har tagit fram rutiner och teknik för att bundla ihop mindre filer till färre stora genom sprites, image inlining och att slå ihop javascript och CSS.
HTTP/2 har tagits fram för att fungera med nutidens krav på kommunikation över HTTP med lösningar som multiplexing, server push och komprimering av headers.
Att säkerhet och tls/ssl-certifikat blivit allt viktigare kan vi också se från Google. För flera år sedan började dom satsa på allvar för att uppmana oss att börja använda certifikat i högre utsträckning. För några år sedan genom att i sin ranking-algoritm straffa sajter utan cert men i den senaste versionen av Chrome (Chrome 56 som släpptes den 31:e januari i år) att aktivt varna användare från att fylla i kreditkortsuppgifter och credentials på sajter utan godkända certifikat. Firefox gör samma sak i senaste version.
Tillbaka till statistiken. Jag har sett siffror på att över 50% av trafiken idag går från klienter som har stöd för HTTP/2, medan stöder från dagens sajter alltså är på 10%. Men de stora webbservrarna har nästan alla stöd för att slå på HTTP/2, i senaste versioner.
Jag har testat Caddy, en modern server som vill vara snabb, enkel och säker. "Surf the web like it's 2017". Ja tack!
Med Caddy är det busenkelt att sätta upp en proxy eller statisk html(alt markdown!)-sajt och på köpet få HTTP/2 och automatiskt cert via Let's encrypt. Det här med automatiskt cert är viktigt både för din och dina användares säkerhet men också för att alla stora webbläsare kräver tls för att använda HTTP/2.
Steg för steg för att testa lokalt:
- Ladda ner Caddy
- Installera på OSX, Windows eller Linux
- Skapa en fil du kallar "Caddyfile" och lägg till två rader:
localhost:8081
tls off|self_signed
Rad 1 konfigurerar ditt domännamn.
Rad 2 stänger antingen av tls (det är aktiverat per default) eller skapar ett self signed certifikat åt dig.
Sist men inte minst: Gå till valfritt directory i Terminalen och skriv "caddy".
Med Caddy som proxy istället för nginx utan HTTP1.1 så har jag sett förbättring på laddningstid i browsern (på grund av bättre hantering av parallella requests och komprimerade headers), dessutom har jag över tid sätt kortare tid för TLS handshake med Let's encrypt istället för ett traditionellt cert som jag körde på nginx:en och all in all en förbättring i responstid från servern. Allt detta utan att förändra den bakomliggande koden över huvud taget.
Med tanke på att potentiellt 50% av dina användare redan har stöd för HTTP/2 börjar det väl bli dags att serva din webb med denna uppgradering? Det finns naturligtvis bakåtkompatibilitet både hos webbservers och webbläsare så att kommunikationen fallbackar till HTTP1.1 om det visar sig att endera part inte har stöd för HTTP/2 ännu. Fiffigt va?