You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Current »

TDAT2004-A Datakommunikasjon med nettverksprogrammering

Oppgave 9 - HTTP/2

Ole Kristian Aune og Christian Echtermeyer

1. Innledning

HTTP/2 tilhører applikasjonslaget, mer nøyaktig som en del av Sesjonslaget og er tett knyttet sammen med SSL/TLS. Det er ikke en erstatning for HTTP/1.x, men kan heller anses som en mer effektiv måte å representere HTTP-protokollen på. Det er IETF (The Internet Engineering Task Force) som har utviklet HTTP/2 og som står for all vedlikehold av HTTP-protokollen.

Skjermbilde 2017-02-26 kl. 16.09.57.png

2. Ønsket funksjonalitet  

Hva er det man ønsker å oppnå, hvilke funksjonelle mangler vil man bøte på, hvorfor har man denne tjenesten eller dette systemet.

Hovedtingene man ønsker å oppnå med HTTP/2 er:

  • binær overføring i stedet for tekstlig.

  • fullt multiplekset, i stedet for fast rekkefølge og blokkering

  • kan bruke en kobling for parallell overføring

  • komprimere header-informasjon for å minke overhead (HPACK)

  • tillater servere å dytte (“push”) filer man regner med at klienten kommer til å be om, til klientens chache.

Størrelsen på dagens nettsider, og antall ressurser hver side ønsker å laste inn har endret seg mye siden HTTP/1.1 standarden ble utformet. [3] Det har også måten man lager og tenker på nettsider. Dagens nettsider er mer en form for web-applikasjoner enn statiske sider med linker mellom seg. Dermed har også kravet for hvordan man overfører data endret seg. Binær overføring i stedet for tekstlig overføring. Det gjør at man slipper å parse hver eneste bokstav for å lese informasjonen, man har istedet lengdeinformasjon som forteller hvor langt man skal lese fremover for den neste informasjonen. I tillegg bruker HTTP/2 kun én TCP forbindelse. Denne er multiplekset og man kan derfor kjøre paralell overføring over denne uten å støte på “head-of-line”-blokkering som i HTTP/1.1. Med mange forespørsler til serveren, ønsker man å ha mindre overhead, derfor har man i HTTP/2 utformet en egen komprimeringsalgoritme (HPACK) for header-informasjon i forespørslene. HPACK fungerer ved hjelp av en statisk tabell, der alle de vanligste headerene ligger lagret, en dynaisk tabell og huffmann-koding. Den siste av de store optimaliseringene er at serveren nå får lov til å “pushe” flere filer enn det kienten spør om. Dette kan for eksempel være bilder eller stilsett som man kan forvente at klienten kommer til å be om etter den har fått parset HTML-filen. Vi kan derfor sende disse filene til klientens cache, så den kun trenger å hente lokale filer når den er klar for å be om disse.

3. Virkemåte

Beskriv hvordan ting fungerer og gjøres. Oppbygning og struktur. Forklare med illustrasjoner eller skjermklipp, bilder eller analyse av pakkefangst.

HTTP/2 bruker såkalte "frames" for å sende informasjon, der informasjonen er kodet binært. Grunnen til at frames er binære er at dette gjør framing mye enklere. For eksempel er det å finne ut starten og slutten på frames veldig komplisert i HTTP/1.1 og generelt også andre tekstbaserte protokoller. (HTTP/1.1 er en tekstbasert protokoll.) Men når framsene er binære blir dette mye enklere..


I HTTP/2 finnes det forskjellige typer frames, men alle har det samme oppsettett: Lengde, Type, Flagg, Stream, ID, og payload. Det finnes ti forskjellige typer frames i HTTP, men de viktigste og mest fundamentale er Data og Headers.


I HTTP/2 er streams et viktig konsept. En stream er en uavhengig "bi-directional" (går begge veier) sekvens med frames som sendes mellom client og serversiden. HTTP/2 benytter seg av noe som heter multiplexing av streams, dette vil si at pakker fra mange streams er blandet på samme forbindelse og kombineres, før de splittes igjen på den andre siden.

070715_0018_HTTP2Faster2.png


Hver stream har en prioritet, eller vekt, som indikerer hvilken stream som skal ansees som den viktigste. Denne attributten kan endres dynamisk under kjøring noe som gjør at nettlesere kan spesifisere hva som skal prioriteres og gjør innlasting mer effektivt, og for eksempel hvis man bytter "tab" i en nettleser vil den automatisk fokusere på nye streams som nå får en høyere prioritet.


HTTP er som kjent en tilstandsløs protokoll, noe som vil forenklet si at hver request må ha med seg nok informasjon til at serveren kan tjene den uten an serveren trenger å lagre info og meta-data fra tidligere requests. HTTP/2 bygger på HTTP og dermed fungerer på samme måte.


HTTP/2 infører også kompressjon for headers gjennom noe som heter HPACK, noe som gjør at HTTP/2 comprimerer mye av headerene, dermed raskere innlasting.

4. Referanser

Når man i den løpende teksten omtaler standarder, organisasjoner eller annet skal dette refereres. Referanselisten føres her (ikke URL i den løpende teksten)


[1]http://httpwg.org/specs/rfc7540.html

[2]http://httpwg.org/specs/rfc7541.html

[3]https://http2.github.io/faq/



  • No labels