HTTP/2

HTTP/2 (HTTP version 2) er den nyeste udgave af HTTP-protokollen som bruges i kommunikationen mellem webservere og browsere. HTTP/2 blev en standard i maj 2015 med RFC 7540, næsten 20 år efter at den nuværende HTTP/1.1 blev standardiseret i 1997.

Et af målene med HTTP/2 er at reducere den tid der går fra en browser sender en forespørgsel til en webserver til siden er hentet og klar til at blive vist på skærmen. En webside består typisk af mange forskellige dele - markup, billeder, stylesheets, JavaScript osv - og der skal derfor normalt bruges mere end én HTTP-forespørgsel/svar-sekvens for at hente en webside.

Med HTTP/1.1 åbner en browser en forbindelse til en webserver, og derefter sender browseren én forespørgsel ad gangen til serveren - den næste forespørgsel sendes først afsted når svaret på den foregående er modtaget. Denne måde at kommunikere på er ikke specielt effektiv, så det kan tage lang tid at hente alle dele af en webside, specielt hvis forbindelsen er langsom eller hvis serveren er længe om at behandle en forespørgsel (f.eks. fordi der skal hentes indhold fra en database).

De fleste browsere åbner derfor flere forbindelser til en webserver når en side skal hentes, så forskellige dele af en webside kan hentes samtidig. Dette skaber imidlertid nogle andre problemer

  • Der er en overgrænse for hvor mange samtidige forbindelser en server kan håndtere - jo flere forbindelser der oprettes fra hver browser til serveren, desto færre brugere kan serveren håndtere på samme tid
  • Internettet er designet med nogle sofistikerede mekanismer der skal sikre at det forbliver anvendeligt under høj belastning, men disse sættes ud af spillet når browsere opretter mange parallelle forbindelser til den samme server

HTTP/2 forsøger at løse dette problem ved at tillade at en enkelt TCP-forbindelse kan håndtere mange samtidige HTTP-forespørgsler og -svar. Serveren behøver ikke længere at besvare forespørgsler i rækkefølge, men kan sende et svar så snart det er klar. Indholdet af forespørgsler og svar brydes op i mindre dele der kan sendes hver for sig, så der ikke opstår situationer hvor et HTTP-svar med mange data ikke behøver at blive afsendt i sin helhed før der bliver plads til andre svar på forbindelsen.

HTTP/2 giver også mulighed for at prioritere forespørgsler, så vigtige forespørgsler kan behandles først, og en server kan proaktivt begynde at sende elementer til serveren som den tror browseren har brug for, uden at behøve at vente på en forespørgsel.

De fleste nyere browsere har allerede support for HTTP/2, og serversupport er på vej (LiteSpeed 5 som vi bruger på vores egne servere har allerede HTTP/2 support, og Apache og Nginx webserverne er på vej).

Selv om det ikke er et krav i standarden, så har browserproducenterne valgt kun at understøtte HTTP/2 over krypterede forbindelser. En praktisk konsekvens heraf er at websites der ønsker at understøtte HTTP/2 skal kunne tilgås via https i stedet for http, og det er derfor nødvendigt at installere et ssl-certifikat for websitets domæne på serveren.

Hvis du deltager på årets GOTO Copenhagen konference, så har du mulighed for at høre mere om HTTP/2 tirsdag eftermiddag hvor Daniel Stenberg fra Mozilla fortæller mere om hvad HTTP/2 betyder for webudviklere og brugere.