Kuidas ma näen, et see HTTP/2 ikka töötab?

HTTP/2 peaks muutma brauseri ja serveri suhtluse kiiremaks ning netist leiab nii kenasid demosid selle tõestuseks (nt Akamai, Gophertiles) kui võimalusi kontrollida HTTP/2 toe olemasolu oma veebil (nt keycdn).

Kuna kõigil Zone HTTPS-iga Virtuaalserveritel on nüüd HTTP/2 vaikimisi lubatud (vt: Järgmine veebilehtede turbonupp sisse lülitatud: HTTP/2) siis … kuidas näha, et see ka tegelikult toimib ja midagi kiiremaks teeb? Ja kust ma üldse näen, et brauser HTTP/2 ühendust kasutab?

Võttes nt zone.ee esilehel lahti brauseri inspektori (paremklõps > Inspector > Network), lisades kuvatavate veergude hulka Protocol’i ja laadides lehe uuesti peaks avanema selline pilt:

inspector-protocols-h2-spdy-1.1Nagu näha on enamus ühendusi h2 ehk HTTP/2, aga näha on ka mõned välised vanemaid protokolle kasutavad CDNid (millest ilmselt võiks nüüd loobuda, vähendamaks tehtavate ühenduste arvu).

HTTP/2 nähtav ja demotav kiiruse-võit tuleb sellest, et brauser saab küsida kõik lehe kuvamiseks vajalikud pildi/stiili/skripti-failid serverilt ühe TCP-ühendusega, määrates ühtlasi ära nende olulisuse. Server saab saata vastused parimas võimalikus järjekorras ning eriti nutikas server võib juba algsele päringule vastates anda kaasa nimekirja vajalikest lisafailidest ja need ühe hooga ka teele panna.

Kui viimane variant ehk server push välja arvata, ei vaja efektiivsem ühendus täiendavat seadistamist ehk HTTP/2 sisselülitamisega hakkasid kõik senised Zone Virtuaalserverite turvalised HTTPS-ühendused kasutama uut protokolli (kuigi teoreetiliselt toetab HTTP/2 ka mitte-turvalist ühendust on brauserivalmistajad öelnud, et nemad seda toetama ei hakka).

Lihtsaks testiks sattus näppu Eesti E-kaubanduse Liidu e-poodide sooduskampaania E-smaspäev, mille lehelt leiab 128 ühesuurust logo.

Välistamaks kõiki muid mõjusid genereerib lihtne skript (vt repo GIThubis) neist igal lehe-laadimisel unikaalsete nimedega pildipilve, täpselt sama skript on nähtav kolmelt URLilt:

Erinevuse nägemiseks tasuks seda teha mõne mobiilse või muul põhjusel mitte-kõige-kiirema ühenduse abil, sest kiire fiiberoptika otsas on päringu ja vastuse vahele jääv viivitus pea olematu.

Testides 10Mbps koduse ADSLi ja WiFi abil näeb erinevus välja selline (sedapuhku laetakse 2 komplekti logosid):

See katse pole mõistagi eriti teaduslik (kes teab mis mu koduvõrgus veel toimus, kogutud pole piisavalt andmeid ja arvutatud standardhälbeid) – aga video on lõikamata ja 5+5 järjestikust laadimist annavad empiirilise eelise HTTP/2 versioonile. Nagu laadimise mustrist näha tulevad HTTP 1.1 puhul pildid vastavalt brauseri poolt paralleelselt saadetud päringutele trobikondade kaupa, HTTP/2 puhul aga korrapäraselt järjekorras.

Millega veel testida? www.webpagetest.org Lubab katsetada erinevatest asukohtadest, Ardil on tavaks proovida Prahas oleva serveriga, tulemused sellised:

HTTP 1.1:

http1-ardi

HTTP/2:http2-ardi

Selle testi järgi annab HTTP/2 ca 26% võitu lehe laadimise kiiruses. Aga paraku on numbrid võrdlemisi ebastabiilsed, miska … olgu, lisame testlehele ka kiiruse mõõtmise performance.timing abil… Ja kordame vidos näha olevat eksperimenti ehk laeme üle 4G telefoni jagatud WiFi vaheldumisi kahte lehte, tehtud sai 39 laadimist ning tulemused on sellised:

HTTP 1.1  – keskmine 2281ms, mediaan 1815ms
HTTP/2 – keskmine 1682ms, mediaan 1315ms

Ehk siis HTTP/2 oli ka selles testis 26-28% kiirem kui HTTP 1.1, lisaks stabiilsem – kui välja arvata need kaks katse pikimat laadimisaega:

http1-http2-graph

(kellel huvi testi korrata, siis kood on GIThubis ja soovi korral võin reeta ka logide asukoha)

Testi kokkuvõtteks: kui su veebis on hulk pilte, skripte ja stiilifaile – näiteks on tegu optimeerimata Magentoga ehk valdava enamusega Magentodest – annab HTTP/2 kõvasti võitu ning tagab lehe kiirema ja sujuvama laadimise ka nõrgema ühenduse otsas. Kui lehel on aga vaid kaks pilti ning vajalik JS ja CSS on hoole ja armastusega paari faili kokku kogutud, pole effekt ilmselt eriti märgatav.

Aga server push, see peaks ju andma mega-edu?

Server push’i näide vajaks keerulisemat testi – ilmselt peaks tekitama olukorra, kus brauseril kulub aega tuvastamaks mida on vaja alla laadida ning siis üllatada teda faktiga, et kõik on juba saadetud. Ja mõistagi eeldaks push päris-saitides kasutuselevõtuks serveripoolset tuge, näiteks võiks sisuhaldustarkvara või selle cache-moodul panna kokku nimekirja kõigest vajalikust. WordPress jaoks on olemas HTTP/2 Server Push plugin ja meie arendajatel kirjutatud ka lisa-plugin WP Super Cache jaoks, aga …

… on mõned agad. Ja mitte ainult meil – väidetavalt 70% maailma HTTP/2 liiklusest käib läbi CloudFlare ja nad teatasid 28. aprillil, et toetavad nüüd ka server push’i: Announcing Support for HTTP/2 Server Push. Paraku ei suuda mina seal viidatud demolehelt mingit pushi toimimist tuvastada ning kui vaadata kommentaariumit on näha, et kõik justnagu katsetavad midagi, ent tulemust ei ole. Toimub intensiivne musta kassi otsimine pimedas toas.

Kes tahab proovida, siis vajaliku päise saadavad ka e-smaspäeva testid kui lisada päringule argument push – https://http2.miljonivaade.eu/?push. Paraku näib olevat mingi probleem Chrome’l, sest push’i puhul tehakse iga pildi kohta täiendav päring veendumaks, et see viimase sekundi jooksul muutunud pole (ja cache keelamise või Chrome Canary puhul tõmmatakse pilt ka 2x alla, torpedeerides edukalt kogu ürituse) – abi selle müstika lahendamisel on teretulnud. Jah, sama jama on läbi CloudFlare testides.

Firefox toimib muideks korrektselt, sellel pildil viitavad hallid mummud piltidele mis saadi (ilmselt) tänu server push’ile ja näha on ka jupike Link-headerist:

firefox-with-push

Kes tahab oma Zone Virtuaalserveris katsetada, siis võib teha nagu mina – lisasin kaks alamdomeeni mis viitavad samale kataloogile, tellisin mõlemale tasuta Let’s Encrypt serdi ja siis lülitasin ühel HTTP/2 toe välja, alamdomeeni puhul saab seda teha kui minna serverihalduses Veebiserver > Alamdomeenid > [vastav alamdomeen] > Muuda SSL tuge:

alamdomeen-http2

Ladusat lisalugemist (ja veidi vaidlust teemal kui palju ikka HTTP/2 eelist annab) leiab siit: