Skip to content

HTTP/2

HTTP/1.1, joka sallii saman yhteyden käytön useisiin eri pyyntöihin, on ollut käytössä Internetin kannalta pitkään: 90-luvulta lopulta aina tähän päivään saakka. Näiden vuoden aikana on tapahtunut luonnollisesti muutoksia:

  • Internet-yhteydet ovat nopeutuneet
  • Sivut ovat kasvaneet kilotavuista megatavuihin
  • Sivut ovat muuttuneet staattisista sivuista interaktiivisiksi web-applikaatioiksi

Peräkkäisten kyselyiden viive

Olemme aiemmin kurssin aikana oppineet, että "GET / HTTP/1.1"-pyyntö palauttaa index.html-tiedoston. Internet-selain kuten Chrome tulkitsee tiedoston sisällön ja pyytää seuraavaksi ne tiedostot, joihin HTML-tiedostossa viitataan, kuten style.css sekä main.js sekä kissa.jpg. Tämä tarkoittaa, että selain lähettää palvelimelle useita pyyntöjä, joihin palvelin vastaa. Pyynnöt lähetetään yksi toisensa perään eikä rinnakkain. Mikäli pyyntöjä on satoja, ja viive on kymmeniä tai jopa satoja millisekunteja, sivuston lataus kestää luonnollisesti kauan. Viiveet kumuloituvat.

Warning

Huomaa, että ongelmaa ei voi ratkaista nopeammalla (esim. 10 Mbps vs 1000 Mbps) Internet-yhteydellä. Kaistanleveyden kasvattaminen ei auta, koska ongelma on viiveessä, ei kaistanleveydessä.

Ongelman voi pyrkiä ratkaista monin muin tavoin, joihin lukeutuvat:

  • Vähennä tiedostojen määrää.
    • Yhdistä useat CSS-tiedostot yhdeksi.
    • Bundlaa useiden eri JS-tiedostojen koodi suoraan HTML-tiedostoon. (webpack)
    • Bundlaa useat kuvat yhdeksi isommaksi kuvaksi ja leikkele koodissa. (sprites)
  • Paginoi
    • Lataa vain vähän kontenttia kerrallaan, ja loput myöhemmin kun käyttäjä selaa alaspäin tai klikkaa next.
  • Pipelining
  • Useat HTTP-yhteydet
    • Hae kuvat images.domain.com subdomainista. (sharding)
    • Haittana TCP- ja HTTPS-kättelyitä joudutaan tekemään useita.

HTTP Pipelining hyödyt

Kuvio 1: Äärimmäisen kärjistetty HTTP/1.1:n ero ilman Pipelining ominaisuutta ja sen kanssa.

HTTP/2 ratkaisut

Yllä esitellyt kikat paikata HTTP/1.1:n tehottomuutta toimivat jossakin määrin, mutta HTTP/2 tarjoaa kestävämpiä ratkaisuja. Itse standardi löytyy täältä: RFC 9113

Warning

Huomaa, että HTTP/2 toimii vain ja ainoastaan HTTPS:n kanssa, ei koskaan HTTP:n kanssa. Yksikään osoite, joka alkaa http:// ei koskaan käytä HTTP/2:sta.

HTTP/2:n tärkeimmät ominaisuudet ovat:

  • Header compression (HPACK)
    • Header pienenee, joten siirrettävän datan määrä vähenee.
  • Multiplexing
  • Pyyntöjen priorisointi
    • Limitettäville viesteille voidaan asettaa priorittiarvo (weight), joka määrittelee, missä järjestyksessä ne tulee prosessoida.
  • Server Push

Tehtävä

Avaa incognito-ikkuna ja käy alla olevissa osoitteissa. Vertaile latausaikojen eroja:

Koeasetelma on hyvinkin kärjistetty, mutta se havainnollistaa hyvin HTTP/2:n ja HTTP/1.1:n eroja. Muista tutkia myös Network-välilehteä Developer Toolsien avulla.

Tip

Jos haluat kokeilla Chrome-selainta ilman HTTP/2-tukea, luo pikakuvake, joka käynnistää sen --disable-http2-flagilla tai käynnistä se komentokehotteen kautta chrome --disable-http2. Tämä mahdollistaa Developer Toolsien Network-välilehdellä HTTP/2:n ja HTTP/1.1:n erovavaisuuksien vertailun. Muistathan tuhota cachet. Incognito saattaa auttaa.