sveuČiliŠte u rijeci tehniČki fakultet · 2016-09-28 · osnovni cilj ovog završnog rada je...
TRANSCRIPT
SVEUČILIŠTE U RIJECI
TEHNIČKI FAKULTET
Preddiplomski sveučilišni studij računarstva
Završni rad
HTTP/2 - protokol prilagođen modernom webu
Rijeka, rujan 2016. Julian Čop
0069064305
SVEUČILIŠTE U RIJECI
TEHNIČKI FAKULTET
Preddiplomski sveučilišni studij računarstva
Završni rad
HTTP/2 - protokol prilagođen modernom webu
Mentor: izv. prof. dr. sc. Miroslav Joler
Rijeka, rujan 2016.Julian Čop
0069064305
UMJESTO OVE STR. DOLAZI ZADATAK
Izjava o samostalnoj izradi rada
Izjavljujem da sam samostalno izradio ovaj rad.
Rijeka, rujan 2016.
________________
Julian Čop
SADRŽAJ:
1. UVOD ............................................................................................................................................. 1
1.1. Predmet i cilj rada ................................................................................................................. 1
1.2. Izvori podataka i metode prikupljanja ................................................................................ 1
1.3. Sadržaj i struktura rada ....................................................................................................... 2
2. POVIJESNI RAZVOJ HTTP-A .................................................................................................. 3
3. OPĆENITO O HTTP-U................................................................................................................ 4
3.1. Klijent/poslužitelj razmjena podataka ................................................................................ 5
3.2. Sigurnost................................................................................................................................. 7
3.3. HTTP/1.1 ................................................................................................................................ 8
3.3.1. Glavne značajke protokola .............................................................................................. 8
3.3.2. Nedostaci HTTP/1.1 protokola ...................................................................................... 10
4. HTTP/2 ......................................................................................................................................... 12
4.1. Ekperimentalni SPDY protokol ......................................................................................... 12
4.2. Prednosti HTTP/2 protokola .............................................................................................. 13
4.2.1. Povezivanje i logički tok podataka ................................................................................ 13
4.2.2. HPACK ......................................................................................................................... 14
4.2.3. Server push .................................................................................................................... 16
4.2.4. Binarni protokol ............................................................................................................ 17
4.3. Nedostatci HTTP/2 protokola ............................................................................................ 17
4.3.1. Sporo čitanje .................................................................................................................. 17
4.3.2. HPACK bomba .............................................................................................................. 18
4.3.3. Krug zavisnosti .............................................................................................................. 19
4.3.4. Zloupotreba multipleksiranja ......................................................................................... 20
4.4. Prilagodba ............................................................................................................................ 20
4.5. Dodatne mogućnosti ............................................................................................................ 20
5. OPIS PRAKTIČNOG DIJELA ZAVRŠNOG RADA ............................................................. 22
5.1. Priprema za rad ................................................................................................................... 22
5.2. Konfiguracija poslužitelja................................................................................................... 23
5.3. Uspostava HTTP/2 veze na web pregledniku.................................................................... 25
5.4. Mogućnosti web aplikacije.................................................................................................. 27
6. ZAKLJUČAK .............................................................................................................................. 33
LITERATURA .................................................................................................................................... 34
SAŽETAK ............................................................................................................................................ 36
1
1. UVOD
1.1. Predmet i cilj rada
Osnovni cilj ovog završnog rada je prikazati glavna svojstva HyperText Transfer Protokola
verzije 2 (HTTP/2 ili H2), kao i njegov potencijalni doprinos napretku Interneta. HTTP/2
protokol je prilagođen modernom webu, a ujedno i druga glavna verzija jednog od najznačajnijih
internetskih, komunikacijskih protokola - HTTP-a. Tema je odabrana s obzirom da je to prva
nova verzija istog protokola koji se nije mijenjao još od 1997. godine, te zbog toga donosi cijeli
niz nepoznanica te novina, koje je potrebno objasniti i demonstrirati.
U praktičnom dijelu rada osnovni cilj bio je napraviti web aplikaciju ili web sjedište sa zadatkom
predstavljanja prednosti HTTP/2 u odnosu na dosadašnji HTTP/1.1. Demonstrirane prednosti
trebalo je predstaviti u obliku realnih primjera pogodnih za mjerenje i analiziranje.
1.2. Izvori podataka i metode prikupljanja
S obzirom kako je HTTP/2 novi protokol, koji je izašao 2015. godine, većina sadržaja je
pronađena na web portalima te stranicama koje se bave analizom Internet protokola. Također,
mnogo podataka izvučeno je iz RFC dokumenata odnosno Request for Comments dokumenata
izdanih od strane IETF-a (Internet Engineering Task Force). IETF dokumenti opširno opisuju
metode, istraživanja, ili inovacije vezane uz Internet i globalnu povezanost njime.
Informacije su prikupljane i uz pomoć nekoliko video prezentacija novog protokola, koje su
također objavljene na Internetu. Jedna od njih jest i prezentacija sa Chrome Dev Summita iz
2015. godine.
Rad je pisan na način da su se prvo prikupili svi podaci i informacije o temi te se zatim krenulo u
implementaciju zadanog programa te pisanja završnog rada.
2
1.3. Sadržaj i struktura rada
Ovaj dokument pisan je sa ciljem prezentacije HTTP/2 protokola sa naglaskom na razlike
u odnosu na prethodnu verziju HTTP/1.1. Nova verzija donosi mnoga unaprjeđenja, koja su
detaljno opisana, a pojedina čak i predstavljena sa primjerima kojima se nastoji olakšati
razumijevanje istih. Osim toga, opisuje se prilagodba internetske mreže na HTTP/2, pa i njegova
povezanost sa SPDY protokolom (SPDY je internetski, ekperimentalni protokol razvijen od
strane kompanije Google).
U prvom dijelu ovog dokumenta opisan je i protokol HTTP/1.1, kao i HTTP protokol i njegov
razvitak. Razlog za to leži u činjenici, da nije moguće shvatiti kako funkcionira novi HTTP/2
protokol bez poznavanja barem osnovnog znanja o HTTP protokolima, a posebice o verziji
HTTP/1.1 koja mu prethodi.
Tijekom razrade teme HTTP/2 protokola, opisuju se i njegovi najveći, dosad otkriveni, nedostaci
koji bi mogli naštetiti njegovom sve većem širenju. Uz nedostatke, opisane su i dodatne
mogućnosti, s kojima bi HTTP/2 postao još efektivniji i brži.
Dokument sadrži i detaljni opis praktičnog dijela završnog rada sa fokusom na njegovu izradu i
mogućnosti.
Na kraju rada nalazi se i poglavlje Zaključak (6.), koje služi kao okvirni osvrt na temu i
subjektivni stav prema uspješnosti projekta i samom radu.
3
2. POVIJESNI RAZVOJ HTTP-A
Sami početak razvoja HTTP protokola veže se uz nastajanje hiperteksta i Interneta. Tim
Berners -Lee, zajednom sa CERN timom, još je 1989. godine napravio originalni HTTP, zajedno
sa HTML-om i ostalim pripadajućim tehnologijama, a taj je projekt poznatiji pod pojom World
Wide Web. Prva verzija protokola imala je samo jednu liniju koda za zahtjev odnosno jednu
metodu (GET, POST ili HEAD), koja je mogla poslati poslužitelju (engl. server) isključivo
zahtjev za web stranicom. Kao odgovor od poslužitelja, klijent bi dobio HTML dokument. Ta
verzija protokola, koja je dokumentirana 1991. godine, naziva se HTTP V0.9. [1]
Nešto kasnije, 1995. godine, Dave Raggett vodio je HTTP Working Group s ciljem proširivanja
protokola sa dodatnim operacijama, mogućnostima, bogatijim meta-informacijama te
sigurnosnim protokolom. Uz sve to, pridodane su još i dodatne metode (PUT, DELETE, LINK),
ali i polja zaglavlja (engl. header fields), koja do tada nisu postojala. Taj novi protokol nazvan je
HTTP V1.0 ili HTTP/1.0 te je doživio izniman uspjeh, iako je i on posjedovao određene
nedostatke. RFC 1945 i službeno je priznao novu verziju HTTP V1.0 sredinom 1996. godine.
Danas, gotovo svaki poslužitelj može komunicirati preko HTTP/1.0, međutim zahtjevanje nove
TCP veze za svaki zahtjev ima veliki negativan utjecaj na brzinu izvođenja. Pod pojmom TCP
veze podrazumijeva se veza koja koristi Transmission Control Protocol (TCP) i pripada
transportnom sloju. Koristi se pri isporuci podataka na način, da se TCP segmenti podataka
pakiraju u (IP) pakete te takvi šalju preko veze.
To nije bio jedini problem HTTP/1.0 protokola te se, već u razdoblju od 1995. do 1999. godine
razvijao novi ažurirani i poboljšani standard - HTTP/1.1. O njemu će biti riječi nešto kasnije u
nastavku (poglavlje 3.3.).
Dugo vremena nije bilo nikakvih promjena protokola, točnije sve do 2007. godine, kada
HTTPbis Working Group radi reviziju i nastoji unaprijediti postojeći protokol. Kao rezultat toga,
izlazi šestodjelna specifikacija, koja nadopunjuje RFC 2616, u kojem je službeno dokumentiran
HTTP/1.1.
Daljnji napredak Interneta, kao i povećanje njegovih korisnika, zahtjevao je i nova unaprjeđenja
kod HTTP internet protokola, te je u svibnju 2015. godine izašao i HTTP/2 kao posljednja
verzija tog protokola.
4
3. OPĆENITO O HTTP-U
HTTP odnosno HyperText Transfer Protocol najznačajniji je protokol aplikacijskog sloja
na Internetu. On služi prvenstveno za razmjenu hipertekstova odnosno strukturiranih tekstova
koji koriste logičke poveznice. Za uspostavljanje veze najčešće koristi TCP protokol
transportnog sloja, iako se može prilagoditi i primjeniti i za UDP veze (npr. HTTPU, SSDP).
UDP, kao i TCP, je protokol koji se koristi kod transportnog sloja, ali je od TCP-a znatno
jednostavniji i nema kontrolu razmjene podataka (pogodan za komunikacije gdje su pogrješke
prihvatljive)
Koristi se kao sredstvo komunikacije između klijenta i poslužitelja, pri čemu je bitno za
napomenuti kako riječi "klijent" i "poslužitelj" predstavljaju samo uloge koje program ima
unutar određene veze te nije isključeno da se i klijent i poslužitelj nalaze na istom računalu .
Klijent je, stoga, program koji ostvaruje vezu sa poslužiteljem kako bi poslao jedan ili više
HTTP zahtjeva, te pridobio željene datoteke ili usluge od poslužitelja. S druge strane, poslužitelj
ili server predstavlja program koji prihvaća vezu, potvrđuje je odgovore u obliku poslane poruke
te ispunjava klijentove zahtjeve, ukoliko je u mogućnosti ih izvršiti. Pri tome sasvim je nebitno
kakva vrsta medija/podataka se razmjenjuje između sugovornika, jer HTTP nije zavisan samo o
jednoj vrsti podataka već može prenositi gotovo sve. Podaci se šalju jedan po jedan preko
portova, a HTTP, ako nije drugačije navedeno, koristi broj porta 80 (alternativni port za HTTP je
8080). [2]
HTTP je ujedno i protokol bez stanja (engl. stateless), odnosno protokol koji ne održava
konstantnu vezu između sugovornika već se svaki upućeni zahtjev promatra odvojeno. To znači,
da poslužitelj ne mora pratiti stanje te nikakve informacije vezane uz klijenta. Međutim iako je
definiran kao bez stanja, HTTP ipak sprema određene informacije o klijentu u obliku kolačića
(engl. cookie), koje kasnije može koristiti kod, primjerice, profiliranja klijenata.
5
3.1. Klijent/poslužitelj razmjena podataka
Komunikacija između klijenata i poslužitelja temelji se razmjeni zahtjeva te pripadajućih
odgovora, pritom poštivajući dogovorenu sintaksu temeljenu na RFC dokumentaciji i
standardima.
Slika 3.1. Komunikacija između klijenta (engl. client) i poslužitelja (engl. server). Klijent šalje
HTTP zahtjev (engl. request) na zadani URL poslužitelja (URL predstavlja putanju do sadržaja
tj. resursa na Internetu), a kao odgovor (engl. response) od poslužitelja prima cjelokupni HTML
dokument. [3]
Zahtjev je, dakle, poruka kojom klijent otvara komunikaciju između klijenta i poslužitelja, te se
sastoji od metode koja se koristi, URI traženog izvora podataka te verzije HTTP preko koje se
planira poslati zahtjev, ali i ostalih dodatnih polja zaglavlja. URI odnosno Uniform Resource
Identifier predstavlja niz znakova kojima se identificira izvor (npr.
https://example.org/resource.txt). Za slanje zahtjeva HTTP koristi razne metode. Te metode
odnose se na obavljanje neke akcije, poput dohvaćanja određenih podataka na udaljenom
poslužitelju. Prve metode koje su nastale bile su GET, POST i HEAD, dok je s vremenom
dodano još pet metoda: OPTIONS, PUT, DELETE, TRACE i CONNECT. Zahtjev se šalje dalje
na URI izvora podataka, koji označava string znakova po kojima se prepoznaje mjesto/ računalo
s kojega se podaci šalju na odredište.
Kod slanja odgovora na dobivene zahtjeve, procedura je drugačija. Odgovor, osim osnovnog
tijela poruke, kao što je npr. HTML dokument kojeg je klijent zatražio, sadrži i statusnu liniju te
ostala polja zaglavlja. Statusna linija označava početak odgovora, a nadopunjava se pridruženom
tekstualnom frazom, kao što je, na primjer, 200 OK.
6
One su od izrazite važnosti s obzirom da ukazuju kako primatelj, odnosno klijent, treba
interpretirati sljedeću poruku koju dobije od poslužitelja. Pri tom, razlikujemo 5 različitih grupa
statusnih linija (x označava nedefinirani broj):
1xx - informational; zahtjev je zaprimljen i može se poslati ostatak (HTTP klijenti
ignoriraju ovu statusnu liniju u zaglavlju)
2xx - successful; zahtjev je uspješno zaprimljen
3xx - redirection; potrebna je dodatna akcija kako bi se izvršio zahtjev
4xx - client error; zahtjev ili ima pogrješku u sintaksi ili nemože biti izvršen
5xx - server error; statusna linija, koja tumači klijentu, kako je poslužitelj taj koji nije
mogao izvršiti traženi zahtjev [4]
Slika 3.2. Prikaz poruka zahtjeva (lijevo) i odgovora (desno). I kod jednog i drugog prisutno je
zaglavlje, te narančasta linija koja označava prazan red, nakon kojeg dolazi tijelo poruke. [5]
Može se primjetiti da su zaglavlja, smještena unutar zahtjeva i odgovora, od izrazite važnosti za
funkcioniranje same komunikacije korištenjem HTTP-a. Oni sadrže sve potrebne, dodatne
informacije kako bi se veza između klijenta i poslužitelja uspješno i efikasno uspostavila. Postoje
4 vrste zaglavlja (general, request, response i entity). General zaglavlja mogu se koristiti i kod
slanja zahtjeva i kod slanja odgovora. Za razliku od general zaglavlja, request zaglavlja koriste
se isključivo kod slanja zahtjeva sa strane klijenta, dok se response zaglavlja koriste kod slanja
odgovora. Entity zaglavlja definiraju meta informacije kod poslane poruke ili kod izvora
podataka na koji klijent šalje zahtjev.
7
3.2. Sigurnost
Pitanje sigurnosti kod HTTP protokola rješeno je uz pomoć drugih slojeva OSI modela
(Open Systems Interconnection modela). Osnovni primjer jednog od takvih sigurnih, internetskih
protokola je i HTTPS ili HyperText Transfer Protocol Secure, koji je nastao kombinacijom
protokola HTTP s protokolom SSL (Secure Socket Layer) / TLS (Transport Layer Security). Za
razliku od HTTP-a koji koristi port 80, HTTPS standardno rabi TCP/IP port 443 te njegovi URL-
ovi počinju s "https://". Ovaj protokol omogućava kriptiranu komunikaciju i sigurnu
identifikaciju web poslužitelja mreže. HTTPS veze često se koriste za novčane transakcije na
World Wide Webu i za ostale povjerljive transakcije u korporativnim informacijskim sustavima,
odnosno općenito kada je potrebno poslati povjerljivu informaciju ili osigurati pouzdanu
identitifikaciju. Isto tako, služi i kao osnova uspostavljanja veze za HTTP/2 protokol.
Bitno je naglasiti kako prilikom prijenosa podataka, sve važne informacije, poput onih o
privatnosti klijenta ili same poruke, trebaju biti spremljene u ekriptiranoj formi na poslužitelju.
Pri tome, proxy poslužitelji, odnosno računala koja se nalaze između krajnjih točaka pošiljatelja i
primatelja kao posrednici, trebaju biti posebno oprezni kako ne bi odali identitet klijenta.
Cijeli sustav sa HTTPS-om može se koristiti i za autentikaciju korisnika odnosno kontrolu
pristupa. Prilikom kontrole pristupa administrator web-stranice uobičajeno stvara određenu
vjerodajnicu (engl. certficate) za svakog pojedinog korisnika, te se tu vjerodajnicu učitava u
njegov preglednik. Vjerodajnica ili certifikat sadrži ime i e-mail adresu ovlaštenog korisnika, kao
i još neke dodatne opcionalne podatke, a automatski je provjeravan od strane poslužitelja za
svako ponovno povezivanje kako bi potvrdili korisnikov identitet, potencijalno čak i bez unosa
lozinke.
8
3.3. HTTP/1.1
3.3.1. Glavne značajke protokola
HTTP/1.1 verzija HTTP protokola nastala je kao revizija iznenađujuće uspješnog
HTTP/1.0 protokola, a ujedno je i prethodnik nove HTTP/2 verzije. Službeno je objavljena
unutar RFC 2068, 1997. godine. Rezultat je četverogodišnjeg istraživanja i dogovaranja skupine
web programera (HTTP Working Group). Potaknut velikim brojem korisnika koji su prihvatili
ovaj protokol, HTTP/1.1 standard doživio je i određena poboljšanja i ažuriranja 1999. godine,ali
i dalje se radi o istom protokolu.
HTTP/1.1, u odnosu na prijašnji protokol donosi nekoliko novina koje su još više unaprijedile i
poboljšale sami protokol. Omogućava brže učitavanje web stranica od originalnog HTTP-a te
smanjeni web promet.
Jedna od najvažnijih značajki koja je ubrzala izvođenje je sposobnost slanja više istodobnih
zahtjeva preko jedne veze. Umjesto otvaranja i zatvaranja veze za svaki par zahtjev/odgovor koji
se šalje, klijent ili poslužitelj može poslati nekoliko zahtjeva/odgovora preko neprekinute (engl.
persistent) veze jedan za drugim (engl. pipeline), koji će zatim biti prihvaćeni od strane
međuspremnika (engl. buffer) primatelja. Za to koristi posebno polje zaglavlja, koje govori
primatelju da drži vezu otvorenom (Connection: keep-alive).
Slika 3.3. Primjer usporedbe gdje se s lijeve strane nalazi komunikacija bez slanja više
istovremenih zahtjeva (engl. pipelining), a desno sa više istovremenih zahtjeva. [6]
9
Osim toga, HTTP/1.1 koristi i novi mehanizam za slanje podataka nazvano razdijeljeno
kodiranje prijenosa (engl. chunked transfer encoding). Razdijeljeno kodiranje prijenosa označava
slanje podataka/datoteke u serijskim zasebnim dijelovima (eng. chunk) preko HTTP. Pri tomu je
veličina dijela datoteke poslana prije samog dijela datoteke, kako bi primatelj znao kada bi
trebao završiti sa primanjem podataka za taj dio. Kao i kod slanja više zahtjeva preko jedne veze,
i mehanizam razdijeljenog kodiranja prijenosa koristi posebno polje zaglavlja (Transfer-
Encoding: chunked), koje dolazi umjesto Content-Lenght polja zaglavlja, s obzirom
da pošiljatelj nemora znati veličinu podatka da bi ga počeo slati preko veze.
Slika 3.4. Primjer uobičajenog slanja dokumenta (lijevo) te razdijeljenog kodiranja (desno). [7]
HTTP/1.1 je, također, uveo i podršku za predmemoriju (engl. caching). Caching predstavlja
privremenu pohranu podataka, kako bi budući zahtjevi za istim podacima bili brži posluženi.
Osnovni cilj pohranjivanja u predmemoriju kod HTTP-a jest povećati efektivnost slanja
podataka, na način da se eliminira potreba za slanjem nepotrebnih zahtjeva sa strane klijenta te
dugih punih odgovora sa druge strane.
Za razliku od HTTP/1.0, njegov nasljednik HTTP/1.1 efektivnije se koristi i samim IP adresama
(IP broj ili IP adresa predstavlja jedinstvenu brojčanu oznaku računala na Internetu), pa je tako
omogućeno i posluživanje više domena sa jedne IP adrese.
10
3.3.2. Nedostaci HTTP/1.1 protokola
Kao razlog pojavljivanja prvih problema sa HTTP/1.1, možemo navesti ogromno
povećanje korisnika, čiji se broj utrostručio samo u posljednjih 4 godine. Tako su zahtjevi web
sjedišta i aplikacija postali sve više suprotstavljeni mehanizmima i pravilima na kojima se
zasnivala HTTP/1.1 verzija protokola. Sve do pojave novog protokola, uvijek se nastojalo
zaobići potencijalne nedostatke HTTP/1.1 ili ih, jednostavno, neutralizirati uz pomoć dodatnih
tehnika (engl. best practices) ili čak ostalih protokola drugih slojeva.
Jedan od najvećih problema, koji su se pojavljivali kod HTTP/1.1 je problem prijenosa podataka
nazvan head-of-line blokiranje. Head-of-line blokiranje je fenomen koji smanjuje brzinu
prijenosa podataka na webu, a pojavljuje se kada prvi paket blokira ostale kod zajednog slanja
više zahtjeva (engl. pipelining). Do problema dolazi zbog blokiranih TCP veza, pri čemu je bitno
naglasiti, kako veza ostaje zauzeta za jedan klijent/poslužitelj par od slanja zahtjeva sve do
primitka odgovora od strane poslužitelja. To znači da nijedan drugi klijent nemože poslati novi
zahtjev na tu istu vezu, a svi paketi iza prvoga paketa moraju čekati njegov dolazak kod strane
primatelja. Originalni HTTP/1.0 omogućava samo 2 veze za spajanje, no s vremenom, te
razvojem drugih verzija protokola, to ograničenje se podiglo na 6, što je i dalje poprilično malo,
zbog čega i dolazi do zagušivanja i head-of-line blokiranja.
Slika 3.5. Prikaz head-of-line blokiranja (označeno crvenom bojom). Na slici se prikazuje
višestruko slanje zahtjeva sa strane klijenta te zatim nepotrebno čekanje poslužitelja, koji nezna
je li klijent završio sa slanjem ili nije. [8]
11
Broj od samo 6 mogućih istovremenih TCP veza ujedno i povećava vrijeme odaziva (engl.
latency), odnosno vrijeme proteklo od slanja paketa od strane klijenta pa sve do primitka istog
paketa na strani poslužitelja. Samim time, i vrijeme čekanja za učitavanje pojedine web stranice
postaje mnogo duže.
Osim toga, HTTP/1.1, prilikom slanja svojih paketa (zahtjeva ili odgovora), u zaglavljima vrlo
često ponavlja ista polja. Ta ponavljujuća polja zaglavlja često nepotrebno uzrokuju da se TCP
prozor zagušenja vrlo brzo napuni podacima te i tu dolazi do dodatnih čekanja. Kao primjer
možemo navesti korištenje sesija, pri čemu se šalju uvijek ista, duga polja kolačića te user-
agenta (označava klijenta odnosno u velikom broju slučajeva korišteni internetski preglednik).
12
4. HTTP/2
Koliko je HTTP/1.1 kvalitetan i efikasan protokol, dovoljno za sebe govori njegova dugotrajnost,
s obzirom da se koristio gotovo 16 godina bez ikakvih promjena i ažuriranja na njemu. Međutim,
16 godina u području informacijskih tehnologija je veoma dugačak period, u kojem je Internet
drastično napredovao te povećao svoj broj korisnika, zbog čega je čak i HTTP/1.1 počeo
pokazivati svoje "godine". Svi problemi nabrojani iz poglavlja 3.3.2, jednostavno su postali
preveliki te su previše utjecali na perfomanse samog protokola. Iz tog razloga, počela se javljati
sve veća potreba za novim protokolom, koji će biti prilagođeniji modernom webu.
HTTP/2 protokol druga je velika revizija HTTP internetskog protokola, čija je specifikacija
objavljena kao RFC 7540 u svibnju 2015. godine. Protokol je razvila skupina programera i
inovatora poznatija pod nazivom HTTP Working Group. Već do završetka iste 2015. godine,
velika većina preglednika, kao što su Chrome, Opera, Firefox, Internet Explorer, Safari prihvatila
je protokol te započela sa njegovim korištenjem.
4.1. Ekperimentalni SPDY protokol
Prije nego li se započne sa upoznavanjem HTTP/2 protokola, potrebno je, najprije,
objasniti njegov početak i sličnost sa eksperimentalnim SPDY protokolom. SPDY protokol je
protokol za razmjenu web sadržaja i podataka otvorene specifikacije, razvijen sa strane tvrtke
Google. On manipulira HTTP web prometom sa ciljem povećanja brzine učitavanja web stranica
i povećanjem internetske sigurnosti. Kako bi to postigao, koristi se kompresijom podataka,
prioritizacijom te multipleksiranjem, a upravo je ovo zadnje ključno za spajanje više transakcija
podataka unutar jedne veze.
Bitno je napomenuti da SPDY ne zamjenjuje HTTP, već mijenja način na koji se njegovi podaci
šalju preko veze. Tako rečeno, SPDY se može shvatiti kao "tunel" za HTTP i HTTPS protokole.
SPDY omogućuje operacije preko TCP-a, iako primarno ipak zahtjeva slanje podataka preko
SSL/ TLS veze, uz TLS dodatak ALPN. Application-Layer Protocol Negotiation, ili skraćeno
ALPN, dodatak je TLS-a, koji daje aplikacijskom sloju za pravo odabrati koji protokol će se
koristiti preko uspostavljene sigurne veze. ALPN se koristi i u HTTP/2.
S obzirom kako je SPDY ipak samo eksperimentalni protokol, Google je prestao davati podršku
za njega u veljači 2015. godine, kako bi time oslobodio prostor i dao šansu da što više korisnika
prihvati njemu sličan, nadolazeći protokol HTTP/2.
13
4.2. Prednosti HTTP/2 protokola
HTTP/2, vrlo često identificiran i kao H2 (h2), koristi istu semantiku kao i prijašnji HTTP
protokoli te se i dalje primjenjuje zahtjev/odgovor način komunikacije, zaglavlja i ostali
čimbenici, no bitna je razlika u načinu slanja istih. Iz toga proizlazi da je ključni faktor
poboljšanja, u odnosu na prijašnje protokole, razlika u performansama.
4.2.1. Povezivanje i logički tok podataka
Veza za razmjenu podataka preko HTTP/2 može se stvoriti preko TLS ili preko TCP veze.
Za spajanje preko TCP veze nije potreban prethodno implemetirani HTTP/1.1 protokol te je
moguća upotreba HTTP/2 protokola bez prijašnjih verzija.
Način uspostave veze preko TLS-a ipak je ponešto drugačiji od uobičajenog. To je, ponajprije
zbog toga što se HTTP/2 veza mora uspostaviti kao nadogradnja (engl. upgrade) na već postojeći
protokol, što znači da svaka veza započinje spajanjem sa poslužiteljem preko HTTP/1.1 veze te
se onda prelazi na novi protokol koji se i koristi u daljnjoj komunikaciji. Pri tome, i klijent i
poslužitelj moraju podržavati HTTP/2, jer, u protivnom, veza ostaje na protokolu sa kojim je i
započela - HTTP/1.1. Većina je preglednika odlučila podržati samo tu opciju, pa tako mnogi web
preglednici nude HTTP/2 usluge samo preko TLS veze. Samim time, enkripcija i zaštita
podataka postale su obavezne.
Uspostavljanje veze između klijenta i poslužitelja neizostavan je dio njihove međusobne
razmjene podataka. Zbog toga bi, to uspostavljanje veze, trebalo biti što jednostavnije i
efikasnije.
Kod HTTP/1.1 gubi se mnogo vremena zbog problema sa blokiranjem svih 6 mogućih TCP veza
te zbog head-of-line blokiranja, uslijed čega su budući zahtjevi bili na nepotrebnom čekanju. Taj
problem, HTTP/2 rješio je na način upostavljanja samo jedne TCP veze.
Uspostavljanje samo jedne TCP veze između klijenta i poslužitelja omogućeno je zbog toga što
se HTTP/2 koristi multipleksiranjem te logičkim tokom podataka (eng. logical stream) kako bi
osigurao što bolje performanse. On dijeli svoje HTTP poruke u binarne okvire (engl. frame) sa
dogovorenim veličinama te ih onda kao tokove podataka (engl. stream) šalje na vezu, koju svi
zajedno koriste (dijeli se propustnost). Time se rješio i problem head-of-line blokiranja, jer
14
ukoliko jedan tok podataka postane blokiran čekajući odgovor, drugi tok može preuzeti vezu i
koristiti ju. Svi tokovi podataka zajedno dijele istu vezu i njezinu propustnost.
Slika 4.1. Primjer logičkog toka podataka preko jedne TCP veze. Osnovni tokovi podataka koji
se nalaze na vezi, podijeljeni su na okvire zaglavlja i podatkovne okvire. [9]
Klijent, isto tako, može odlučivati o težini, odnosno prioritetu svakog toka podataka, kao i
njihovoj međusobnoj zavisnosti. Tako, može dobiti kritične i potrebne podatke odmah i bez
čekanja na slanje ostalih podataka. Određivanje prioriteta i zavisnosti su, za sada, implementirani
samo na klijentovoj strani, međutim ozbiljno se razmišlja i o njihovom uvođenju na strani
poslužitelja.[10]
Kao što je već spomenuto, HTTP poruke se dijele na okvire. Postoje 2 vrste osnovnih okvira, a
to su okviri zaglavlje i podataka (i jedni i drugi su vidljivi na slici 4.1.). Iz samih naziva, može se
zaključiti o čemu je riječ i koji dio paketa, tj. poruke oni sadržavaju.
4.2.2. HPACK
Podijela zaglavlja i podataka na okvire, donijela je još jednu mogućnost koja dotad nije
bila ostvariva, a radi se o kompresiji samih zaglavlja. Ne samo to, u HTTP/2 implementirana je
potpuno nova, posebna kompresija, samo za HTTP zaglavlja pod nazivom HPACK.
HPACK se koristi algoritmom poznatim kao Huffmanovo kodiranje, koje doprinosi smanjenju
veličine podataka poslanih preko mreže, pritom upotrebljivajući tablice sa binarnim kodovima.
Sva zaglavlja, koja su slana preko HTTP/2, poslana su preko TCP veze u obliku HPACK
formata.
15
Svojim kompresiranjem, HPACK smanjuje veličinu zaglavlja za gotovo 30%, a, isto tako,
uspješno zamjenjuje prikupljanje podataka sa više izvora istovremeno (eng. domain sharding).
[11]
Postoje 3 glavne prednosti HPACK-a:
koristi se fiksnim Huffman kodiranjem za velika zaglavlja
mogućnost kodiranja već korištenih, otprije poslanih, polja zaglavlja kao varijable u byte-
ovima. Time se izbacilo nepotrebno ponovno slanje cijelih zaglavlja kod svakog slanja
paketa.
zbog kodiranja, podaci više nisu ugroženi napadima na kompresiju (CRIME napadi).
Gzip kompresija upravo zbog učestalih CRIME napada nije podržana unutar HTTP/2.
Huffmanovo kodiranje je algoritam koji radi tako da pridružuje binarne kodove umjesto sadržaja
pojedinog polja zaglavlja. Na taj način, kada primatelj zaprimi zaglavlje kompresirano HPACK-
om, on pogleda u tablicu sa binarnim kodovima te zatim vrši dekompresiju. Tablica sadrži
statički i dinamički dio.
Dinamički dio tablice koristi se za dinamičko indeksiranje. Tako se stalno ponavljujuća polja
zaglavlja, poput user-agenta, mogu zapisati u tablicu kao poseban binarni kod, koji će se pri
sljedećem slanju upotrijebiti umjesto cijelog polja user-agenta.
Slika 4.2. Korištenje HPACK-a kod slanja polja polja zaglavlja [12]
Na Slici 4.2., možemo vidjeti 3 tablice, od kojih se lijevo nalazi tablica sa originalnim poljima
zaglavlja, u sredini tablica korištena za HPACK kompresiranje te desno polja zaglavlja, koja su
prethodno izmjenjena sa binarnim kodovima. Slika prikazuje kako se, uz korištenje HPACK
16
tablice, na primjeru poslanog zaglavlja, metoda GET pretvorila u binarni kod 2. Isto tako,
prikazano je i korištenje dinamičkog dijela tablice za, primjerice, user-agent polje.
4.2.3. Server push
Server push predstavlja tehnologiju pomoću koje poslužitelj šalje podatke klijentu i prije
nego što ih je klijent zatražio i poslao zahtjeve. Server push-om najčešće se šalju podaci za kojih
se pretpostavlja da će zatrebati klijentu pri njegovom daljnjem radu. Njime se nastoji smanjiti
broj putovanja zahtjeva i odgovora, čime se, ako se pravilno koristi, mogu poboljšati
performanse za čak 60%. [13]
Slika 4.3. Prikaz primjera server push tehnologije za datoteke style.css i script.js, za koje klijent
nije imao potrebe slati dodatne zahtjeve s obzirom da su one već primljene od strane poslužitelja
[14]
Međutim, server push nemora nužno samo poboljšati performanse te ako se koristi nepravilno,
može doći i do još većeg vremena izvršenja operacija i većeg čekanja. To se događa iz razloga
što se prema klijentu šalju podaci koji mu nisu potrebni, čime se nepotrebno zauzima propustnost
veze.
17
4.2.4. Binarni protokol
HTTP/2 je binarni protokol, dok je HTTP/1.1 tekstualni. Binarni protokoli koriste binarne okvire
za poruke što dovodi do boljih i učinkovitijih slanja. Oni su puno kompaktiniji na samoj
fizičkom sloju slanja podataka, ali i puno manje skoni pogreškama od tekstualnih, što je od
izrazite važnosti.
Binarno kodiranje koristi se i kod izrade okvira zaglavlja i podataka, prije nego li oni budu
poslani na vezu, što dovodi do još efektivnijeg slanja podataka.
4.3. Nedostatci HTTP/2 protokola
HTTP/2 protokol se sve više upotrebljava na web stranicama sa raznim sadržajima, zbog
čega je rano otkrivanje mogućih slabosti i mana zabrinulo i poneke stručnjake. Jedan od njih je i
Poul-Henning Kamp, koji je u svojim tvrdnjama otišao toliko daleko da tvrdi da je HTTP/2 samo
uljepšano ime za HTTP/1.2. Po njemu, protokol ne riješava ključne i aktualne probleme vezane
uz privatnost i sigurnost, već se iskljućivo fokusira na povećanje propustnosti. Pri tome, Kemp
predlaže da bi bilo korisnije ukloniti mehanizam kolačića te ga zamijeniti određenom vrstom
sesija. Zasad su otkrivena 4 nedostatka odnosno mogućnosti za sigurnosne napade, koje će se
detaljnije predstaviti u nastavku.
4.3.1. Sporo čitanje
Sporo čitanje je napad na poslužitelja sličan Slowloris DDoS napadu, a poziva se na
malicioznog klijenta koji čita odgovore pristigle od poslužitelja veoma sporo, čime nepotrebno
zauzima vezu. Sporo čitanje kao napad, je proučavano i za vrijeme protokola HTTP/1.1,
međutim niti u novom protokolu nisu poduzete nikakve mjere kako bi se ono spriječilo.
18
Slika 4.4. Primjer sporog čitanja kod klijenta. [15]
Na slici 4.4., gdje se nalazi primjer sporog čitanja, prvo je prikazano uspostavljanje TCP prozora
zagušenja (INITIAL_WINDOW_SIZE to 1) te zatim slanje zahtjeva (Stream X GET
request to /large/resource). Odgovor od strane poslužitelja dolazi u obliku Stream
X response, koja je označena crvenom strjelicom, nakon čega klijent šalje još mnoštvo
zahtjeva na stranu poslužitelja.
4.3.2. HPACK bomba
Radi se o napadu na kompresijski sloj, slično napadu sa zip bombom, tj.
"dekompresijskom" bombom. Napadač izrađuje male i naizgled obične poruke, koje se mogu
pretvoriti u gigabajte podataka na poslužitelju. Na taj način troši se poslužiteljska memorija i
tako efektivno usporava ili čak i ruši ciljane poslužitelje.
19
Slika 4.5. Primjer HPACK bombe unutar User-Agenta polja zaglavlja. [16]
4.3.3. Krug zavisnosti
HTTP/2, kao jedno od unaprjeđenja, uveo je i stvaranje prioritizacije i zavisnosti između
paketa/podataka koji se šalju preko veze. Međutim, uz informatičku sposobnost napadača,
moguće je implementirati krug zavisnosti kao petlju te tako izazvati poslužiteljski DoS (Denial
of Service).
Slika 4.6. Prikaz kruga zavisnosti nakon dodavanja šeste zavisnosti te formiranja petlje
između brojeva tokova podataka 7, 5 i 3 [17]
20
4.3.4. Zloupotreba multipleksiranja
Napadač nastoji iskoristiti slabosti novog protokola te implementirati i promjeniti
funkcionalnost multipleksiranja preko jedne veze te tako dovesti poslužitelja u stanje
nemogućnosti odgovora za pojedine klijente ili pak potpunog rušenja.
4.4. Prilagodba
Jedna od glavnih prednosti HTTP/2 protokola jest što web stranice i aplikacije ne trebaju
posebnu prilagodbu za novi protokol. On se može aktivirati odmah, te je kompatibilan sa
prijašnjim HTTP/1.1 protokolom. S obzirom na to, mnoge organizacije i kompanije nastoje
odmah ostvariti profit iz performansi i sigurnosnih mogućnosti HTTP/2 protokola te kako
iskoristiti njegov puni potencijal.
Bitno je da bi aplikacije trebale biti dizajnirane sa implementiranim TCP slojem, koji će
omogućivati višestruke (6) TCP veze za HTTP/1.1, ali i jednu dugotrajniju preko koje će se
odvijati multipleksiranje i logički tok podataka preko HTTP/2 protokola.
Također, mnoge optimizacije i poboljšanja koja se koriste za HTTP/1.1, poput objedinjavanja ili
prikupljanja podataka sa više domena, postale su nepotrebne sa dolaskom novog protokola. Ne
samo to, nego u pojedinim situacijama, one mogu biti i kontradiktorne radu HTTP/2 te time
usporavati njegov rad, stoga je njihovo isključivanje preporučljivo.
4.5. Dodatne mogućnosti
Iako HTTP/2 dovodi puno novih poboljšanja te tehnologija, ipak postoji još mogućnosti
koje programeri mogu sami implementirati i, na taj način, povećati brzinu izvođenja operacija na
svojim stranicama.
Jedna od takvih mogućnosti je i dodatna kompresija sa gzipom. Gzip kompresija oslanja se na
DEFLATE algoritam, koji predstavlja kombinaciju LZ77 i Huffmanovog kodiranja (koristi se u
HPACK-u). Omogućavanje gzipa na poslužitelju neposredno prije slanja podataka na vezu,
dovodi do značajnijih poboljšanja u brzini te isključuje nepotrebno slanje vec kompresiranih gzip
datoteka.
21
Do poboljšanja dolazi zbog činjenice da se gotovo 50% cijelokupnog dijela HTML dokumenta,
36% CSS datoteka te 26% Javascripta i dalje šalju nekompresirani preko veze, što usporava
protok podataka.[13]
Ipak, treba biti oprezan sa uključivanjem gzip kompresije, s obzirom da su neke datoteke, poput
jpeg ili videa, već visoko kompresirane te je nepotrebno još jedno dodatno kompresiranje.
Osim gzip kompresije, programeri mogu prilagoditi pohranjivanje u predmemoriju novom
protokolu te postaviti osjetljivija kontrolna cache zaglavlja, ali i optimizirati potragu za DNS
poslužiteljima (računala sa pohranjenom bazom imena koja uparuju sa pripadajućim IP
adresama) te CDN-om (globalnom mrežom proxy poslužitelja koja nastoji klijentima osigurati
visoke performanse).
Sve te promjene mogu dodatno ubrzati potrebno vrijeme učitavanja stranice bez radikalnih
prilagodbi te mijenjanja (pogotovo u slučaju gzip kompresije). Njihovo implementiranje ovisi
isključivo o samom programeru/korisniku te služe samo kao dodatak HTTP/2.
22
5. OPIS PRAKTIČNOG DIJELA ZAVRŠNOG RADA
5.1. Priprema za rad
Rad na praktičnom dijelu završnoga rada započeo je sa osmišljavanjem te okvirnim
dizajniranjem što bi aplikacija odnosno web stranica trebala sadržavati. Kao glavni cilj,
postavljena je prezentacija osnovnih unaprjeđenja koje HTTP/2 donosi te prikaz eventualnih
razlika u odnosu na HTTP/1.1. HTTP/2, kao protokol moguće je implementirati u mnoštvu
jezika poput Jave, C, C++, Perla. [18]
Za prikaz razlika između dva protokola potrebna su i dva različita pristupa poslužitelju, jedan
koji će pružati usluge preko HTTP/2 veze i jedan koji će pružati usluge preko HTTP/1.1 veze.
Zbog toga je bilo potrebno prethodno preuzeti i instalirati Apache HTTP Server Project ("httpd")
uz pomoć kojeg se može napraviti sigurne i efikasne poslužitelje tj. servere. Apache httpd
verzija 2.4.23 slobodna je za preuzimanje te ima opširnu popratnu dokumentaciju.
Povezivanje klijenta i poslužitelja preko HTTP/2 veze zahtjeva i dodatno instaliranje pojedinih
knjižnica i programa. Jedna od tih knjižnica je i nghttp2, koja sadrži implementaciju HTTP/2
protokola te kompresiju podataka zaglavlja uz HPACK kompresiju. Njegova instalacija ključna
je za uspostavu HTTP/2 veze, a ona nije moguća bez još dodatnih pojedinih knjižnica i alata kao
što su libev, zlib, cython, php5 itd. Cijelu listu alata o kojima zavisi nghttp2 knjižnica može se
vidjeti na stranici projekta.[19]
Osim libnghttp2 knjižnice, jedna od bitnijih knjižnica koje je potrebno instalirati je openssl
knjižnica. Openssl knjižnica potrebna nam je kod uspostave HTTPS veze, a kao što je već ranije
spomenuto, bez mogućnosti HTTPS veze nije moguće implementirati ni HTTP/2 vezu.
I jednu i drugu knjižnicu bilo je potrebno aktivirati kao dodatak unutar glavne konfiguracijske
datoteke za Apache stoga je ona prilagođena sa linijama koda (direktiva LoadModule) vidljivima
na slici 5.1.
23
Slika 5.1. Dodatak konfiguracijskoj datoteci httpd.conf
5.2. Konfiguracija poslužitelja
Za implementaciju web stranica sa različitim protokolima koristio sam se Apache httpd
verzijom 2.4.23. Prvi zadatak bio je konfigurirati pristup poslužitelju preko 2 različite adrese sa
različitim protokolima, a iskoristio sam mogućnost stvaranja različitih domaćina preko direktive
VirtualHost.
VirtualHost je konfiguracijska direktiva koja omogućava pružanje usluga više web stranica na
istom računalu/poslužitelju. Pri tome, svaka web stranica ima vlastitu IP adresu, koja može biti
dodatno povezana sa odgovarajućim nazivom. Dvije lokalne adrese koje su korištene pri izradi
praktičnog dijela aplikacije su 127.0.0.1 (za HTTP/2) te 127.1.1.1 (za HTTP/1.1).
Za dvije već spomenute adrese, izradio sam i dvije posebne konfiguracijske datoteke unutar
direktorija etc/apache2/sites-available. Za IP adresu 127.1.1.1 korištena je
http1host.conf datoteka, sa dokumentima unutar direktorija /var/www/html te jedino
omogućenim HTTP/1.1 protokolom preko porta 80.
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
LoadModule http2_module modules/mod_http2.so
LoadModule ssl_module modules/mod_ssl.so
24
Slika 5.2. Sadržaj konfiguracijske datoteke http1host.conf
Konfiguracijska datoteka za HTTP/2 vezu sa poslužiteljem naziva se localhost.conf i nalazi se na
slici 5.3. Na njoj se nalaze 2 virtualna poslužitelja, jedan za port 80 preko kojeg se uspostavlja
http veza, te jedan za port 443 preko kojeg se uspostavlja https veza. S obzirom kako se preko
nje spajamo isključivo kao preko HTTPS sigurne veze, Virtualhost za port 80 u potpunosti
je zakomentiran jer nema potrebe da se on koristi.
Dokumenti korišteni pri spajanju HTTP/2 vezom sa poslužiteljem nalaze se u /var/www/ssl,
dok je početni dokument koji se otvara pri uspostavljanju veze sa poslužiteljem index.html.
Datoteka localhost.conf započinje sa linijom <IfModule mod_ssl.c> što označava
korištenje ssl modula i prijenos podataka preko HTTPS veze (port 443). HTTPS veza je potrebna
iz razloga što web preglednici mogu uspostaviti HTTP/2 vezu jedino preko nje, i to u obliku
nadogradnje na već postojeći protokol (opisano u poglavlju 5.2.1. Povezivanje i logički tok
podataka).
Jedan od većih problema kod HTTPS veze je stvaranje vjerodajnica. S obzirom kako se
uspostavlja jedino lokalna veza sa poslužiteljem, vjerodajnice mogu biti samostalno napisane
(eng. self-signed). Za izradu vjerodajnice može se koristiti openssl naredba, koja je nalazi unutar
prethodno instalirane openssl knjižnice.
<VirtualHost 127.1.1.1.:80>
ServerName http1server
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Protocols http/1.1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#LogLevel info ssl:warn
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
25
Bitno je pravilno pozvati vjerodajnice unutar konfiguracijske datoteke localhost.conf kao na slici
5.3. (datoteke vjerodajnice su example.crt i example.key) jer bi u suporotnom moglo bi
doći do problema prilikom uspostavljanja veze.
Slika 5.3. Sadržaj konfiguracijske datoteke localhost.conf
5.3. Uspostava HTTP/2 veze na web pregledniku
Nakon konfiguriranih datoteka za pristup poslužitelju, potrebno je otvoriti web preglednik te
pristupiti lokalnoj adresi localhost preko HTTPS veze. Pristupanje localhost adresi treba se
otvoriti index.html dokument unutar koje se nalazi izbornik sa primjerima.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/ssl
ServerName localhost
DirectoryIndex index.html
ErrorLog /var/log/apache2/localhost-error.log
CustomLog /var/log/apache2/localhost-access.log combined
SSLEngine On
SSLCertificateFile /etc/apache2/crt/example.crt
SSLCertificateKeyFile /etc/apache2/key/example.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
26
Međutim problem do kojeg se tada dolazi, nalazi se u samim postavkama korištenog web
preglednika, a radi se o blokiranom pristupu. Web preglednici ne prepoznaju samostalno
napisane vjerodajnice te ih iz tog razloga smatraju nesigurnim čime se blokira pristup takvim
stranicama.
Postavke je potrebno promjeniti da one omogućuju rad neprovjerenim, samostalno napisanim
vjerodajnicama ili jednostavno stvaranjem izminke za adrese preko kojih pristupamo poslužitelju
preko HTTP/2 veze. Nakon toga, pristup localhost adresi biti će omogućen te će se otvoriti
početna stranica izrađene web aplikacije.
Iako je pristup stranici dozvoljen te je uspostavljena HTTPS veza sa poslužiteljem, i dalje nije
aktivirana HTTP/2 veza što je vidljivo i u zaglavljima početne stranice. Novi protokol moguće je
aktivirati dodavanjem Protocols direktive i prilagodbom apache2.conf datoteke koja se
nalazi unutar /etc/apache2 direktorija. Direktiva koja se dodaje glasi Protocols h2
h2c http/1.1, unutar koje se kao argumenti prozivaju h2, h2c i http/1.1 protokoli.
Prije ponovnog pokretanja stranice na web pregledniku potrebno je ponovno pokrenuti Apache
poslužitelj, kako bi se ažurirale izrađene promjene.
Ukoliko su pravilno izvršene sve prethodno navedene instalacije te prilagodbe poslužitelja,
ponovnim pristupanjem localhost adresi opet će se otvoriti index.html dokument sa izbornikom,
ali ovog puta preko HTTP/2 veze (Version: HTTP/2.0) što je i vidljivo na slici 5.4., uz
preostala polja zaglavlja.
Slika 5.4. Prikaz zaglavlja localhost adrese sa dostupnim razvojnim alatima unutar web
preglednika.
27
5.4. Mogućnosti web aplikacije
Pristupanjem vezi sa poslužiteljem preko localhost adrese, otvara se index.html dokument sa
prikazanim izbornikom te opisom implementirane web aplikacije. Unutar izbornika ponuđeno je
nekoliko različitih tipova primjera na kojima je glavni fokus na prikazivanju razlika između
HTTP/1.1 i HTTP/2 protokola.
Slika 5.5. Prikaz početnog izbornika sa ponuđenim poveznicama na web stranice određenog
primjera
Primjer s istovremenim učitavanjem slike prikazuje stranicu otvorenu sa HTTP/1.1 vezom prema
zajedničkom poslužitelju. Unutar stranice očitavaju se 2 različita iframe-a te ponuđene opcije
odnosno gumbovi (engl. button). Iframe označava okvir sa otvorenim HTML dokumentom
unutar nekog drugog HTML dokumenta. Na primjeru istovremenog učitavanja slike postoje 2
iframe-a, od kojih je jedan za HTTP/2 vezu te drugi za HTTP/1.1 vezu. Oba iframe-a pristupaju
različitim adresama koje otvaraju jednake HTML dokumente (pictureload.html) te mjere vrijeme
potrebno za njihovo otvaranje. Osim iframe-ova ponuđene su i opcije "Ponovno učitaj", koja ima
funkciju ponovno učitati cijelu web stranicu te opcija "Natrag" za povratak na početni izbornik. I
jedna i druga opcija prisutne su, gotovo, na svakoj stranici, zbog lakšeg kretanja te vršenja
operacija.
28
Slika 5.6. Prikaz stranice s istovremenim učitavanjem 2 iframe-a (jedan za HTTP/2 vezu, drugi
za HTTP/1.1 vezu). Iz priloženog se može vidjeti kako je brzina učitavanja slike od gotovo
13MB veća kod HTTP/2 veze (626ms) nego kod HTTP/1.1 veze (1169ms).
Drugi primjer s učitavanjem slike otvara identični dokument (pictureload.html) kao u
prvome primjeru, ali u odvojenim stranicama za svaki protokol. Unutar njega se ne koriste
iframe-ovi jer nema nikakve potrebe za njihovim korištenjem.
Možda najbolji primjer sa prikaz poboljšanja koje HTTP/2 donosi jest primjer sa učitavanjem
180 slika od 619B na jednoj stranici. Uspoređujući i jedan i drugi protokol vidljive su razlike u
performansama te samom načinu učitavanja.
Slika 5.7. Prikaz učitavanja stranice sa 180 slika sa HTTP/1.1 protokolom (lijevo) te sa novim
HTTP/2 protokolom (desno).
29
Iz priložene slike 5.7. vidljiva je razlika na načinu kako se slike učitavaju. HTTP/1.1, zbog
problema nazvanog head-of-line blokiranje (opisano unutar poglavlja 3.3.2.) učitava slike gotovo
nasumično, bez ikakvog reda što, u konačnici, dovodi do sporije brzine učitavanja i nepotrebnog
zauzimanja veze. HTTP/2 protokol učitava slike po redu kako su navedene u dokumentu, a to se
najbolje vidi na prijenosu paketa iz slike 5.8.). Do ometanog slanja paketa podataka (slanje
paketa je označeno plavom bojom) kod HTTP/1.1 veze dolazi upravo zbog head-of-line
blokiranja, što uzrokuje puno čekanja (označena sivom bojom). Također, ponovno je vidljiva i
razlika u performansama, s obzirom da je HTTP/1.1 vezi za učitavanje stranice sa slikama bilo
potrebno 1.68s, dok je za istu tu stranicu HTTP/2 utrošio 0.756s na učitavanje stranice.
Slika 5.8. Prikaz prijenosa paketa kod HTTP/1.1 veze (gore) te HTTP/2 veze (dolje)
30
Primjer sa učitavanjem 10 dijelova slike jednak je kao i primjer sa 180 dijelova slike, no razlika
se nalazi u broju samih slika, kao i u njihovoj veličini. I kod tog primjera, brzina učitavanja
stranice bila je znatno veća kod HTTP/2 protokola (0.709s), nego kod HTTP/1.1 protokola
(1.970s).
Server push je tehnologija uvijek se spominje kao jedno od bitnijih unaprjeđenja koja HTTP/2
donosi (opisana unutar poglavlja 4.2.3.). Međutim, njegov utjecaj moguće je detaljnije prikazati
jedino uz upotrebu razvojnih alata za prikaz zaglavlja zahtjeva i odgovora. U primjeru izrađene
web aplikacije, server push implementiran je uz pomoć PHP jezika, na način da su zaglavlju
pridodana Link polja koja pokazuju na slike koje se nalaze unutar
/var/www/ssl/pictures/ direktorija.
Kako bismo se uvjerili da su Link polja zaglavlja stvarno i pridodana, omogućena je dodatna
opcija pregleda headera odnosno zaglavnja za stranicu na kojoj se otvara
serverpush_page.php dokument.
Slika 5.9. Prikaz izgleda stranice koja otvara serverpush_page.php dokument na kojemu se nalazi
i par slika planet.jpg i doge.jpg
31
Slika 5.10. Prikaz HTTP/2 zaglavlja zahtjeva i odgovora uz pomoć razvojnih alata web
preglednika (Google Chrome) - sa korištenom server push metodom
Na slici 5.10. pokazuje se pristup localhost adresi, koja uspostavlja HTTP/2 vezu sa serverom. S
obzirom na korištenje server push metode kojom su dohvaćene slike, nema nikakve potrebe za
slanjem dodatnih zahtjeva za doge.jpg i planet.jpg datotekama. Iz tog razloga prikazuju
upozorenja (Provisional headers are shown) sa tkz. privremenim zaglavljima kod zahtjeva
32
Slika 5.11. Prikaz HTTP/1.1 zaglavlja zahtjeva i odgovora uz pomoć razvojnih alata web
preglednika (Google Chrome).
Na slici 5.11. pristupa se IP lokalnoj adresi 127.1.1.1, koja uspostavlja HTTP/1.1 vezu sa
serverom te se detaljnije prikazuju zaglavlja prilikom dohvaćanja planet.jpg datoteke. Na kraju
možemo vidjeti kako su, za razliku od slike 5.10. i HTTP/2 protokola, ovdje polja zaglavlja u
potpunosti ispunjena te da slike nisu dohvaćene uz pomoć server push tehnologije već je za
svaku sliku poslan pojedinačni zahtjev.
33
6. ZAKLJUČAK
Tema ovog završnog rada bila je analiza protokola HTTP/2 s naglaskom na razlike u odnosu na
prethodnu verziju, kao i njegov značaj za moderne aplikacije i web stranice. Sva poboljšanja
koja donosi novi protokol detaljno su objašnjena i razrađena, a pojedina su prikazana i kroz
slikovne primjere. Uz pisani dokument, izrađena je i radna aplikacija koja demostrira neka od
poboljšanja HTTP/2 protokola te tako ostavlja vizualni dojam istih. Rad na aplikaciji, kao i njeno
funkcioniranje, također je obuhvaćeno i opisano unutar ovog dokumenta.
HTTP/2, u svakom slučaju, predstavlja budućnost samog Interneta i komunikacije. On donosi
mnoga unaprjeđenja poput kompresije zaglavlja, multipleksinga preko TCP veze te server push-
a. Ipak, kao i većina protokola koji postoje, i HTTP/2 ima svojih nedostataka. Daljnja
istraživanja i analize sigurno bi detaljnije razradile i moguće implementacije te rješenja koja bi ih
ispravila.
Međutim, osobno smatram da ti nedostaci, iako pojedini utječu i na samu sigurnost, neće bitno
utjecati na HTTP/2 protokol i njegov daljni rast. Svi popularni preglednici već u velikoj mjeri
koriste pogodnosti novog protokola, pa tako ni ne čudi što HTTP/2 svakim danom koristi sve
veći broj web stranica.
Naposlijetku, teško je zaključiti koliko će dugo ovaj protokol biti aktualan te da li će u
budućnosti morati proći kroz određene prilagodbe i ažuriranja. Internet se strahovito brzo
mijenja te napreduje, stoga je vrlo složeno raditi takvu vrstu procjena. Sigurno je, da će novi
protokol donijeti gotovo trenutno poboljšanje performansi te, možda i u potpunosti, zamjeniti
prijašnji HTTP/1.1 protokol u narednim godinama, a što pokazuju i dosadašnje statistike.
34
LITERATURA
[1] Grigorik, I. : "High Performance Browser Networking ", O'Reilly Media, rujan 2013
[2] Fielding, R.; Reschke, J. : "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and
Routing", RFC 7230, Internet Engineering Task Force (IETF), lipanj 2014.
[3] slika, s Interneta,
http://www.tankonyvtar.hu/en/tartalom/tamop425/0027_ADW1/ch01s02.html , 2010.
[4] Podila, P. : "HTTP: The Protocol Every Web Developer Must Know", s Interneta,
http://code.tutsplus.com/tutorials/http-the-protocol-every-web-developer-must-know-part-1--net-
31177, 8. travanj 2013.
[5] slika, s Interneta,
https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html , 20.
listopad 2009.
[6] slika, s Interneta,
https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/HTTP_pipelining2.svg/2000px-
HTTP_pipelining2.svg.png , 19. kolovoz 2016.
[7] slika, s Interneta, https://zoompf.com/wp-content/uploads/2012/05/transfer-types-
Chunked.png ,15. svibanj 2012.
[8] slika, s Interneta, https://libosong.appspot.com/spdy/images/HTTP_pipelining_hol.svg , 4.
prosinac 2012.
[9] slika, s Interneta https://d3ansictanv2wj.cloudfront.net/hpbn_1203-
bd2d684acb9279fd147a5882f5580d03.png , 25. rujan 2015.
[10] Thomson, M.; Peon, R.; Belshe, M. : "Hypertext Transfer Protocol Version 2 (HTTP/2)" ,
RFC 7574, 30. svibanj 2015.
[11] Jackson, B. : "KeyCDN Enables HTTP/2 HPACK Compression – Huffman Encoding" , s
Interneta, https://www.keycdn.com/blog/http2-hpack-compression/, 25. travanj 2016.
[12] slika, s Interneta, http://i.imgur.com/3IPWXvR.png, 13. kolovoz 2016.
[13] video sadržaj sa Chrome Dev Summit konferencije, s Interneta,
https://www.youtube.com/watch?v=r5oT_2ndjms , 2015.
[14] slika, s Interneta, http://jecas.cz/files/chrome-dev-summit-2015/push.png, 19. listopad 2015.
35
[15] slika, s Interneta, https://1.bp.blogspot.com/-
xPtRvSYoQRA/V6JHp4FfFZI/AAAAAAAApCc/5WtHZDfB4b0E7WxnVp0gBUBhzfJfCAHx
gCLcB/s1600/http2-nginx-security.png , 3. kolovoz 2016.
[16] slika, s Interneta, https://2.bp.blogspot.com/-
uJmDBCrXR5k/V6JHXc91RjI/AAAAAAAApCU/PjiGdFuRnE8-s0uRyFkLPOjIdqw-
BcfEwCLcB/s1600/http2-nginx.png, 3. kolovoz 2016.
[17] slika, s Interneta,
http://www.sangfor.com/Uploads/Editor/image/20160830/20160830115626_40709.png, 6.
kolovoz 2016.
[18] repozitorij sa listom HTTP/2 implementacija, s Interneta, https://github.com/http2/http2-
spec/wiki/Implementations
[19] repozitorij sa projektnim datotekama, s Interneta,
https://github.com/cop2422/zavrsnirad_http2
36
SAŽETAK
U ovom završnom radu nastoji se opisati i prezentirati novi HTTP/2 protokol sa naglaskom
na razlike u odnosu na prethodnu verziju HTTP/1.1. Opisana su sva unaprijeđenja koja
HTTP/2 donosi, ali i prilagodba na njega, njegovi nedostaci i dodatne mogućnosti. Osim
HTTP/2 protokola, u radu se opisuje i HTTP protokol kroz povijest i sve verzije koje postoje
do danas. Uz napisanu dokumentaciju, u sklopu završnog rada izrađena je i web aplikacija
odnosno sjedište, koja ima glavnu svrhu prikazati neke od unaprijeđenja HTTP/2. Izrada web
aplikacije i njezino instaliranje opisano je unutar dokumentacije. Web aplikacija je
napravljena za poučne svrhe i namjenjena je svima.
Ključne riječi: HTTP/2 protokol, web aplikacija
Abstract
This paper describes and presents the new HTTP/2 protocol with focus on his differences
from HTTP/1.1 protocol. It describes the advantages that HTTP/2 has, his adjustment to
Internet, additional possibilities and his disadvantages. Except HTTP/2, this paper illustrates
HTTP evolution through history with representation of all versions until today. Final project
also contains a functional web application (webpage). Web application demonstrates some of
the advantages that HTTP/2 has. The whole creating process and the development of
application is described inside final project documentation. The application is made for the
educational purposes and everyone is free to use it.
Key words: HTTP/2 protocol, web aplication