HTTP/3

Wikipediasta
Siirry navigaatioon Siirry hakuun

HTTP/3 on HTTP:n kolmas pääversio, jota käytetään tiedonsiirtoon WWW-järjestelmässä ja joka täydentää laajalti aikaisempia versioita HTTP/1.1 ja HTTP/2. Toisin kuin aiemmat versiot, jotka luottavat vakiintuneeseen vuonna 1974 julkaistuun TCP-protokollaan,[1] HTTP/3 käyttää uutta UDPn päälle rakennettua multipleksoitua siirtoprotokollaa QUIC:ia.[2] IETF julkaisi 6. kesäkuuta 2022 HTTP/3:n ehdotettuna standardina dokumentissa RFC 9114.[3]

Version muutokset keskittyvät pääasiassa tiedon siirtoon. Pyyntöjen semantiikka pysyy siis samanlaisena: pyyntömetodit, tilakoodit ja otsakekentät ovat samat kuin aiemmissa versioissa. HTTP/3:lla on alhaisempi viive, joten sen sivut latautuvat nopeammin aiempiin versioihin verrattuna: joissakin tapauksissa jopa neljä kertaa nopeammin kuin HTTP/1.1:llä (joka on vielä monilla verkkosivustoilla ainoa käytössä oleva HTTP-versio).[4][5]

HTTP/3:a tukee (ainakin osittain) 97 prosenttia kaikista seuratuista verkkoselainasennuksista[6] ja 29 prosenttia kymmenestä miljoonasta suosituimmasta verkkosivustosta.[7] Versiota on tukenut Chromium (ja johdetut projektit, kuten Google Chrome, Microsoft Edge, Samsung Internet ja Opera)[8] huhtikuusta 2020 lähtien ja Mozilla Firefox toukokuusta 2021 lähtien.[6][9] Safari 14 lisäsi tuen versiolle, mutta se pysyy oletusarvoisesti poissa käytöstä.[10]

HTTP/3:n protokollapino verrattuna HTTP/1.1:een ja HTTP/2:een

rect 0 44 85 94 HTTP/1 rect 0 95 85 137 Transport Layer Security rect 0 138 85 189 Transmission Control Protocol

rect 126 44 210 94 HTTP/2 rect 126 95 210 137 TLS 1.2 rect 126 138 210 189 Transmission Control Protocol

rect 251 44 336 74 HTTP/3 rect 255 90 328 121 TLS 1.3 rect 251 125 336 158 QUIC rect 251 159 336 189 User Datagram Protocol

rect 0 189 336 231 Internet Protocol </imagemap>HTTP/3 on peräisin QUIC-työryhmän hyväksymästä Internet-luonnoksesta. Alkuperäinen ehdotus nimettiin "HTTP/2 Semantics Using The QUIC Transport Protocol" (suom. HTTP/2 semantiikka käyttäen QUIC-kuljetusprotokollaa) ja myöhemmin "Hypertext Transfer Protocol (HTTP) over QUIC" (suom. hypertekstin siirtoprotokolla QUIC:in yli).[11]

IETF:n HTTP- ja QUIC-työryhmien puheenjohtaja Mark Nottingham ehdotti sähköpostilistakeskustelussa 28. lokakuuta 2018 HTTP-over-QUIC:n uudelleennimeämistä HTTP/3:ksi, jotta "se olisi selkeästi toinen HTTP-semantiikan sitominen siirtoprotokollaan, jotta ihmiset ymmärtävät sen eron QUIC:sta."[12] Muut IETF:n jäsenet hyväksyivät Nottinghamin ehdotuksen muutamaa päivää myöhemmin. HTTP-työryhmä valtuutettiin auttamaan QUIC-työryhmää HTTP/3:n suunnittelussa ja sen ylläpidosta vastaamisesta julkaisun jälkeen.[13]

HTTP/3-tuki lisättiin Chromen canary-testiversioon syyskuussa 2019. Se saavutti lopulta vakaan toiminnan, mutta se otettiin oletusarvoisesti pois käytöstä. HTTP/3 otettiin takaisin käyttöön huhtikuussa 2020.[14] Firefox lisäsi HTTP/3-tuen marraskuussa 2019 ominaisuuslipulla[6][15][16] ja otti sen oletusarvoisesti käyttöön huhtikuussa 2021 Firefox 88:ssa[6][9] HTTP/3:n kokeellinen tuki lisättiin Safari Technology Previewiin 8. huhtikuuta 2020[17] ja se sisältyi Safari 14:ään, joka toimitetaan iOS 14:n ja macOS 11:n kanssa[10][18], mutta se on edelleen oletuksena pois käytöstä Safarista 16. lähtien, sekä macOS:ssä että iOS:ssä.

Vertailu HTTP/1.1:een ja HTTP/2:een[muokkaa | muokkaa wikitekstiä]

HTTP-semantiikka on sama kaikissa versioissa: samat pyyntömenetelmät, tilakoodit]ja otsakekentät ovat käytettävissä kaikissa versioissa. Erot ovat näiden semantiikan yhdistämisessä taustalla olevaan tiedon siirtoon verkon välityksellä. Sekä HTTP/1.1 että HTTP/2 käyttävät TCP:tä siirtoprotokollana. HTTP/3 sen sijaan käyttää QUIC- protokollaa, siirtokerroksen verkkoprotokollaa, joka hoitaa käyttäjätilan ruuhkanhallintaa UDP-siirtoprotokollan yli. Vaihto QUICiin pyrkii korjaamaan HTTP/2:n suuren ongelman, jota kutsutaan "jonon tukkeutumiseksi". Koska HTTP/2:n multipleksoinnin rinnakkaisluonne ei näy TCP:n virhetilannemekanismeille, kadonnut tai uudelleenjärjestelty paketti aiheuttaa kaikkien aktiivisten tapahtumien ja tiedon siirtojen keskeytymisen riippumatta siitä, vaikuttiko kadonnut paketti kyseiseen tapahtumaan. Koska QUIC-protokolla tarjoaa multipleksoinnin suoraan siirtoprotokollatasolla, kadonneet paketit vaikuttavat vain niihin tietovirtoihin, joissa tietoja on kadonnut.

Ehdotetut DNS-resurssitietueet SVCB (palvelusidonta) ja HTTPS mahdollistaisivat yhteyden muodostamisen suoraan HTTP/3-versiolla vastaanottamatta ensin Alt-Svc-otsaketietoa palvelimelta aikaisempien HTTP-versioiden avulla, mikä poistaisi yhden viestin TCP:n kättelyprosessista.[19] HTTPS-resurssitietueille on tuki Firefoxissa versiosta 92 eteenpäin, Safarissa versiosta 14 eteenpäin, ja Chromium tukee sitä ohjelmistolipun takaa.[20][21][22]

Toteutukset[muokkaa | muokkaa wikitekstiä]

Asiakasohjelma[muokkaa | muokkaa wikitekstiä]

Selaintuki HTTP/3:lle
Selain Versio, jossa lisätty (oletuksena pois käytöstä) Versio, jossa lisätty (oletuksena käytössä) Kommentti
Chromium Vakaa (79) joulukuu 2019 87[6] huhtikuu 2020[23] Aiemmissa versioissa on otettu käyttöön muita QUIC-luonnoksia
Edge Vakaa (79) joulukuu 2019 87 huhtikuu 2020 Edge 79 oli ensimmäinen Chromiumiin perustuva versio
Firefox Vakaa (72.0.1) tammikuu 2020 88[9] huhtikuu 2021[24]
Safari Vakaa (14.0) syyskuu 2020 16.4 maaliskuu 2023 Apple kokeili HTTP/3-tukea joillakin Safari-käyttäjillä Safari 16.4:stä alkaen.[25]

Kirjastot[muokkaa | muokkaa wikitekstiä]

Avoimen lähdekoodin kirjastot, jotka toteuttavat asiakas- tai palvelinlogiikan QUIC:lle ja HTTP/3:lle, ovat muun muassa: [26]

Nimi Asiakas Palvelin Ohjelmointikieli Kehittäjäorganisaatio
lsquic Kyllä Kyllä C LiteSpeed
nghttp3 Kyllä Kyllä C
h2o Ei Kyllä C
libcurl[27][28] Kyllä Ei C
MsQuic[29] Kyllä Kyllä C Microsoft
proxygen Kyllä Kyllä C++ Facebook
Cronet Kyllä Kyllä C++ Google
.NET[30] Kyllä Kyllä C# (käyttää MsQuic) Microsoft
quic-go Kyllä Kyllä Go
http3 Kyllä Kyllä Haskell
Kwik Kyllä Kyllä Java
Flupke Kyllä Kyllä Java
aioquic Kyllä Kyllä Python
quiche Kyllä Kyllä Rust Cloudflare
neqo Kyllä Kyllä Rust Mozilla
quinn Kyllä Kyllä Rust
s2n-quic Kyllä Kyllä Rust AWS

Palvelinohjelmisto[muokkaa | muokkaa wikitekstiä]

  • 7. kesäkuuta 2021 LiteSpeed Web Server (ja OpenLiteSpeed) 6.0.2 julkaistiin, ja siitä tuli ensimmäinen palvelinohjelmisto, joka otti HTTP/3:n oletusarvoisesti käyttöön. [31]
  • Caddy-palvelinohjelmiston versio 2.6.0 (julkaistu 20. syyskuuta 2022) otti HTTP/3:n oletuksena käyttöön.[32]
  • Nginx on tukenut HTTP/3:a versiosta 1.25.0 lähtien (julkaistu 23.5.2023). Tekninen esikatselu nginxistä HTTP/3-tuella julkaistiin kesäkuussa 2020. [33] Nginxin valmiiksi käännetyt versiot HTTP/3-tuella julkaistiin helmikuussa 2023. [34]
  • Cloudflare on luonut korjauksen nginxille, joka lisää sen kehittämän HTTP/3-kirjasto Quichen siihen. [35]
  • Microsoft IIS:n tuki HTTP/3:lle lisättiin Windows Server 2022:ssa ja Windows 11:ssa.[36]
  • HAProxy tukee HTTP/3:a versiosta 2.6 lähtien (julkaistu 31. toukokuuta 2022) [37] [38]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. Cerf, Vinton Yogen, Dalal Sunshine, Carl: SPECIFICATION OF INTERNET TRANSMISSION CONTROL PROGRAM datatracker.ietf.org. joulukuu 1974. Viitattu 28.2.2024.
  2. What is HTTP/3? Cloudflare. Arkistoitu 4 July 2022. Viitattu 12 July 2022.
  3. HTTP/3 datatracker.ietf.org. 6 June 2022. Viitattu 6.6.2022. en-US
  4. Gianluca Perna, Martino Trevisan, Danilo Giordano, Idilio Drago: A first look at HTTP/3 adoption and performance. Computer Communications, 1.4.2022, 187. vsk, s. 115–124. doi:10.1016/j.comcom.2022.02.005. ISSN 0140-3664. Artikkelin verkkoversio.
  5. HTTP/3 is Fast Request Metrics. Viitattu 1.7.2022. en
  6. a b c d e "HTTP/3" | Can I use... Support tables for HTML5, CSS3, etc canIuse.com. Viitattu 7.1.2024.
  7. Usage of HTTP/3 for websites World Wide Web Technology Surveys. W3Techs. Viitattu 2 February 2024.
  8. Enabling QUIC in tip-of-tree groups.google.com. Viitattu 8.4.2021.
  9. a b c Damjanovic: QUIC and HTTP/3 Support now in Firefox Nightly and Beta Mozilla Hacks – the Web developer blog. 16 April 2021. Viitattu 17.4.2021. en-US
  10. a b Safari 14 Release Notes developer.apple.com. Viitattu 4 December 2020.
  11. "HTTP-over-QUIC to be renamed HTTP/3 | ZDNet", 12 November 2018. 
  12. Identifying our deliverables mailarchive.ietf.org. Viitattu 28.2.2024.
  13. Hypertext Transfer Protocol Charter ietf.org. Viitattu 2.9.2020.
  14. Enabling QUIC in tip-of-tree groups.google.com. Viitattu 8.4.2021.
  15. Daniel: Daniel Stenberg announces HTTP/3 support in Firefox Nightly Twitter. Viitattu 5 November 2019.
  16. Cimpanu: Cloudflare, Google Chrome, and Firefox add HTTP/3 support ZDNet. 26 Sep 2019. Viitattu 27 Sep 2019.
  17. Release Notes for Safari Technology Preview 104 webkit.org. 8 April 2020. Viitattu 7 August 2020.
  18. Ng: Apple's Safari Adds Support for HTTP3 in iOS 14 and macOS 11 iphoneincanada.ca. 23 June 2020. Viitattu 25 June 2021.
  19. HTTPS RR MDN. Mozilla. Viitattu 25.10.2022.
  20. Firefox 92 for developers 7 September 2021. Mozilla Corporation. Viitattu 25.10.2022.
  21. Feature: HTTP->HTTPS redirect for HTTPS DNS records Google Inc.. Viitattu 25.10.2022.
  22. Patrick Mevzek: What's the use case of SVCB (type 65, service binding) RR 24 August 2021. Stack Exchange Inc.. Viitattu 25.10.2022.
  23. Enabling QUIC in tip-of-tree groups.google.com. Viitattu 9.4.2021.
  24. Firefox Release Owners - MozillaWiki wiki.mozilla.org. Viitattu 9.4.2021.
  25. Jen Simmons: HTTP/3 support shipped in Safari 14.0 GitHub. 4.4.2023. Viitattu 7.4.2023.
  26. QUIC Implementations GitHub. Viitattu 8.4.2021. en
  27. First HTTP/3 with curl | daniel.haxx.se daniel.haxx.se. 5.8.2019. Viitattu 28.2.2024. (englanniksi)
  28. curl/docs/HTTP3.md at master · curl/curl GitHub. Viitattu 28.2.2024. (englanniksi)
  29. MsQuic is Open Source TECHCOMMUNITY.MICROSOFT.COM. Viitattu 28.2.2024. (englanniksi)
  30. Sam Spencer: HTTP/3 support in .NET 6 .NET Blog. 17.9.2021. Viitattu 28.2.2024. (englanniksi)
  31. LiteSpeed Web Server Release Log - LiteSpeed Technologies www.litespeedtech.com. ”Enable HTTP/3 v1 by default.” Viitattu 12.2.2022.
  32. Release 2.6.0 · caddyserver/caddy Github. 22.9.2022. Viitattu 20.9.2022. en-US
  33. Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3 NGINX. 10.6.2020. Viitattu 11.6.2020. en-US
  34. Binary Packages Now Available for the Preview NGINX QUIC+HTTP/3 Implementation NGINX. 8.2.2023. Viitattu 30.3.2023. en-US
  35. Experiment with HTTP/3 using NGINX and quiche The Cloudflare Blog. 17.10.2019. Viitattu 9.11.2019. en
  36. Tratcher: Use ASP.NET Core with HTTP/3 on IIS docs.microsoft.com. Viitattu 29.4.2022. en-us
  37. Announcing HAProxy 2.6 HAProxy Blog. 31 May 2022.
  38. QUIC Implementation in HAProxy HAProxyConf video presentation.