Mikä on HTTP?

Joonas Vanhatapio

Oletko ikinä miettinyt, miten verkkosivuja koskeva tieto siirretään selaimellesi? Tai mitä tarkoittaa HTTP ja mistä kyseinen lyhenne tulee?

Tässä artikkelissa käydään läpi, mikä HTTP on ja mihin sitä käytetään. Testasimme myös HTTP/2:n ja HTTP/3:n nopeutta.

Mihin http-protokollaa tarvitaan?

HTTP (Hypertext Transfer Protocol) on Tim Berners-Leen kehittämä protokolla, jolla selaimet ja www-palvelimet siirtävät tietoa. HTTP:n ensimmäinen versio 0.9 julkaistiin jo vuonna 1991. Tällä hetkellä laajassa käytössä oleva HTTP/1.1 on julkaistu 1997 eli sekin on jo yli 10 vuotta vanha.

Käytännössä lähes kaikkien maailman verkkosivustojen toiminta perustuu siihen, että selain hakee HTTP-yhteydellä HTML-sivustoja ja näyttää ne sitten käyttäjälle. HTTPS-lyhenteen S-kirjain kertoo puolestaan SSL-suojatusta yhteydestä, mikä on tietoturvan kannalta paras ratkaisu.

Mikä on protokolla?

Protokolla on yhteyskäytäntö tai -standardi, joka määrittelee ja mahdollistaa laitteiden tai ohjelmien väliset yhteydet. Esimerkiksi selain lähettää viestin palvelimelle, johon palvelin reagoi ja mahdollisesti myös vastaa toisella viestillä protokollan mukaisesti. Protokollat koostuvat yleensä kolmesta pääosasta: otsikosta (header), kuormasta (payload) ja alatunnisteesta (footer).

Ennen varsinaista kuormaa oleva otsikko sisältää tärkeitä tietoja, kuten lähde- ja kohdeosoitteen sekä muita tietoja (esimerkiksi koko ja tyyppi). Kuorma on se varsinainen tieto, joka lähetetään protokollan avulla. Alatunniste puolestaan seuraa kuormaa ja toimii ikään kuin ohjaajana, joka reitittää palvelinpyynnöt aiotulle vastaanottajalle yhdessä otsikon kanssa varmistaakseen, että tiedot lähetetään virheettöminä.

Protokollaa voisi hyvin verrata ihan perinteiseen kirjeeseen, joka lähetetään postitse. Kirje(=kuorma) lähetetään kirjekuoressa(=otsikko) ja lopuksi päälle kirjoitetaan osoite, kirje suljetaan ja päälle laitetaan postimerkki(=alatunniste).

Kirjekuoria pinossa. Protokollaa voidaan verrata kirjeeseen.

HTTP/2

HTTP:n versio HTTP/2 julkaistiin vuonna 2015. Edellinen 1.1-versio oli jo auttamatta vanhentunut ja siitä johtuen hidas, koska nykyiset verkkosivustot ovat dynaamisia ja sisältävät paljon vaativaa multimediasisältöä. HTTP/2:n merkittävin etu onkin parantunut nopeus sivustoja ladattaessa.

HTTP-yhteys on nykyään binääriä, ei siis enää pelkkää tekstiä, kuten aiemmissa versioissa. Lisäksi yhteyden otsikkotiedot pakataan. HTTP/2:n merkittävin uudistus perustuu kuitenkin siihen, ettei jokaista sivuston osaa enää ladata erikseen omaa yhteyttä pitkin.

Käytännössä sisältö voidaan ladata palvelimen ja selaimen välillä tiiviisti pakattuna peräkkäisenä datana samaa yhteyttä pitkin. Jos aiemmin tarvittiin esimerkiksi kolme yhteyttä tietojen siirtämisen, ne voidaan nykyään siirtää pakattuna samaa yhteyttä pitkin. Isojen tiedostojen latautumiseen tämä ei vaikuta samalla tavalla, mutta useamman pienen tiedoston latautuminen on selvästi nopeampaa HTTP/2:sta käytettäessä.

Sekä Zonerin webhotellit että WP.one tukevat ja hyödyntävät HTTP/2-protokollaa.

HTTP/3

HTTP-protokollan uusin versio HTTP/3 mahdollistaa entistä nopeamman ja turvallisemman tiedonsiirron. Se hyödyntää oletuksena QUIC-protokollaa (Quick UDP Internet Connections).

Aiemman HTTP/2:n heikkous on ollut siinä, että virhetilanteissa kaikkien samaa yhteyttä käyttävien sisältöjen siirto epäonnistuu. Suurin syy ongelmaan on ollut se, että HTTP/2 toimii TCP:n (Transmission Control Protocol) päällä. Yhteys on ollut hidas ja leikannut kiinni tilanteissa, joissa yksikin toimitettava bitti jää puuttumaan.

HTTP/3 hyödyntää QUIC-tiedonsiirtoa.

HTTP/3 käyttää puolestaan QUIC-protokollaa, joka on nopeampi, luotettavampi ja turvallisempi kuin edeltäjänsä. Käytännössä kyse on siis ainoastaan datan kuljetustavan muutoksesta protokollassa.

Tällä hetkellä HTTP/3:a tukee Firefox ja Chrome-selaimet. Jos selain ei tue uutta protokollaa, käytetään tiedostojen siirtämiseen HTTP/2-protokollaa.

Server Push -teknologia

Server Push -teknologia nopeuttaa sivuston latautumista entisestään. Käytännössä se tarkoittaa sitä, että palvelin voi lähettää sisältöä selaimelle tämän sitä pyytämättä. Aiemmin selaimen piti pyytää erikseen jokaista asiaa, jonka se tarvitsi, mutta nyt tiedostot voidaan lähettää jo ennakoivasti.

Esimerkiksi selain lataa sivun A ja palvelin tietää, mitä lisäkyselyjä selain tulee tekemään A:n jälkeen. Server Push -teknologian avulla palvelin voi lähettää resurssit selaimeen jo ennen kuin selain ehtii pyytää niitä.

Server Push -toimintoa voidaan hyödyntää sekä HTTP/2:n että HTTP/3:n kanssa ja se on oletuksena päällä kaikilla WP.one-palvelua käyttävillä sivustoilla. Tarvittaessa sen saa pois käytöstä lisäämällä wp-config.php-tiedostoon rivin:

define( 'DISABLE_HTTP2_PUSH', true );

Testasimme eri protokollien toimintaa

Testasimme HTTP/2:n ja HTTP/3:n toimintaa sekä Server Push -teknologian vaikutusta. Testisivustona toimi wp-cloud.fi.

Tyyli- ja JavaScript-tiedostojen latausaika

Testitulokset saatiin laskemalla vain tyyli- ja JavaScript-tiedostojen latausajat Google Chromen Network-välilehdeltä. Server Push -teknologialla tyylitiedostot ja skriptit latautuivat 2,2 kertaa nopeammin. Cloudflare ei ollut päällä ensimmäisessä testissä.

Server Push ei käytössä198 ms
Server Push käytössä90 ms

Sivuston kokonaislatausaika

Seuraava testi suoritettiin 4 kertaa Google Chromella per mittaustulos ja katsottiin, koska sivuston lataus on suoritettu loppuun. Seuraavissa testissä Cloudflare oli käytössä HTTP/3:n testaamiseksi.

HTTP/2434 ms
HTTP/3419 ms
HTTP/2 + Server Push408 ms
HTTP/3 + Server Push381 ms

Sivuston TTI-arvo

Lopuksi testasimme sivuston aikaa siihen, että sivuston on interaktiivinen (Time to Interactive, TTI). Mittaus on tehty Googlen Lighthouse -työkalulla, jossa simuloitiin puhelimen 3G-verkkoa. Testit suoritettiin 4 kertaa per protokolla, jotta saadaan varmasti luotettava tulos.

HTTP/23,6 s
HTTP/33,5 s
HTTP/2 + Server Push2,3 s
HTTP/3 + Server Push3,3 s

Testituloksemme osoittavat, että HTTP/3 on aiempaa HTTP/2:ta nopeampi. Server Push -teknologia nopeuttaa erityisesti koko sivuston latautumista.

Huomion arvoista on kuitenkin se, että TTI arvo on Server Push -teknologiaa käytettäessä parempi HTTP/2:lla. Tämä voi kuitenkin johtua esimerkiksi siitä, että HTTP/3-standardi on vielä kehityksessä, j a tästä syystä käytetty palvelin tai selain ei tukenut vielä testaushetkellä Server Push -teknologiaa täysin oikein.