HTTP/3
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]
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ä]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++ | |
Cronet | Kyllä | Kyllä | C++ | |
.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ä]- ↑ Cerf, Vinton Yogen, Dalal Sunshine, Carl: SPECIFICATION OF INTERNET TRANSMISSION CONTROL PROGRAM datatracker.ietf.org. joulukuu 1974. Viitattu 28.2.2024.
- ↑ What is HTTP/3? Cloudflare. Arkistoitu 4 July 2022. Viitattu 12 July 2022.
- ↑ HTTP/3 datatracker.ietf.org. 6 June 2022. Viitattu 6.6.2022. (englanti)
- ↑ 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.
- ↑ HTTP/3 is Fast Request Metrics. Viitattu 1.7.2022. (englanti)
- ↑ a b c d e "HTTP/3" | Can I use... Support tables for HTML5, CSS3, etc canIuse.com. Viitattu 7.1.2024.
- ↑ Usage of HTTP/3 for websites World Wide Web Technology Surveys. W3Techs. Viitattu 2 February 2024.
- ↑ Enabling QUIC in tip-of-tree groups.google.com. Viitattu 8.4.2021.
- ↑ 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. (englanti)
- ↑ a b Safari 14 Release Notes developer.apple.com. Viitattu 4 December 2020.
- ↑ HTTP-over-QUIC to be renamed HTTP/3 | ZDNet. Määritä julkaisu!12 November 2018. Artikkelin verkkoversio. (englanti)
- ↑ Identifying our deliverables mailarchive.ietf.org. Viitattu 28.2.2024.
- ↑ Hypertext Transfer Protocol Charter ietf.org. Viitattu 2.9.2020.
- ↑ Enabling QUIC in tip-of-tree groups.google.com. Viitattu 8.4.2021.
- ↑ Daniel: Daniel Stenberg announces HTTP/3 support in Firefox Nightly Twitter. Viitattu 5 November 2019.
- ↑ Cimpanu: Cloudflare, Google Chrome, and Firefox add HTTP/3 support ZDNet. 26 Sep 2019. Viitattu 27 Sep 2019.
- ↑ Release Notes for Safari Technology Preview 104 webkit.org. 8 April 2020. Viitattu 7 August 2020.
- ↑ Ng: Apple's Safari Adds Support for HTTP3 in iOS 14 and macOS 11 iphoneincanada.ca. 23 June 2020. Viitattu 25 June 2021.
- ↑ HTTPS RR MDN. Mozilla. Viitattu 25.10.2022.
- ↑ Firefox 92 for developers 7 September 2021. Mozilla Corporation. Viitattu 25.10.2022.
- ↑ Feature: HTTP->HTTPS redirect for HTTPS DNS records Google Inc.. Viitattu 25.10.2022.
- ↑ Patrick Mevzek: What's the use case of SVCB (type 65, service binding) RR 24 August 2021. Stack Exchange Inc.. Viitattu 25.10.2022.
- ↑ Enabling QUIC in tip-of-tree groups.google.com. Viitattu 9.4.2021.
- ↑ Firefox Release Owners - MozillaWiki wiki.mozilla.org. Viitattu 9.4.2021.
- ↑ Jen Simmons: HTTP/3 support shipped in Safari 14.0 GitHub. 4.4.2023. Viitattu 7.4.2023.
- ↑ QUIC Implementations GitHub. Viitattu 8.4.2021. (englanti)
- ↑ First HTTP/3 with curl | daniel.haxx.se daniel.haxx.se. 5.8.2019. Viitattu 28.2.2024. (englanti)
- ↑ curl/docs/HTTP3.md at master · curl/curl GitHub. Viitattu 28.2.2024. (englanniksi)
- ↑ MsQuic is Open Source TECHCOMMUNITY.MICROSOFT.COM. Viitattu 28.2.2024. (englanniksi)
- ↑ Sam Spencer: HTTP/3 support in .NET 6 .NET Blog. 17.9.2021. Viitattu 28.2.2024. (englanti)
- ↑ LiteSpeed Web Server Release Log - LiteSpeed Technologies www.litespeedtech.com. ”Enable HTTP/3 v1 by default.” Viitattu 12.2.2022.
- ↑ Release 2.6.0 · caddyserver/caddy Github. 22.9.2022. Viitattu 20.9.2022. (englanti)
- ↑ Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3 NGINX. 10.6.2020. Viitattu 11.6.2020. (englanti)
- ↑ Binary Packages Now Available for the Preview NGINX QUIC+HTTP/3 Implementation NGINX. 8.2.2023. Viitattu 30.3.2023. (englanti)
- ↑ Experiment with HTTP/3 using NGINX and quiche The Cloudflare Blog. 17.10.2019. Viitattu 9.11.2019. (englanti)
- ↑ Tratcher: Use ASP.NET Core with HTTP/3 on IIS docs.microsoft.com. Viitattu 29.4.2022. (englanti)
- ↑ Announcing HAProxy 2.6 HAProxy Blog. 31 May 2022.
- ↑ QUIC Implementation in HAProxy HAProxyConf video presentation.