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, HTTP/3 käyttää uutta UDPn päälle rakennettua multipleksoitua siirtoprotokollaa QUIC:ia. IETF julkaisi 6. kesäkuuta 2022 HTTP/3:n ehdotettuna standardina dokumentissa .

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).

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

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
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" () ja myöhemmin "Hypertext Transfer Protocol (HTTP) over QUIC" ().
 
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." 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.

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. Firefox lisäsi HTTP/3-tuen marraskuussa 2019 ominaisuuslipulla ja otti sen oletusarvoisesti käyttöön huhtikuussa 2021 Firefox 88:ssa HTTP/3:n kokeellinen tuki lisättiin Safari Technology Previewiin 8. huhtikuuta 2020 ja se sisältyi Safari 14:ään, joka toimitetaan iOS 14:n ja macOS 11:n kanssa, 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
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.  HTTPS-resurssitietueille on tuki Firefoxissa versiosta 92 eteenpäin, Safarissa versiosta 14 eteenpäin, ja Chromium tukee sitä ohjelmistolipun takaa.

## Toteutukset

### Asiakasohjelma

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

### Palvelinohjelmisto

* 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. 
* Caddy-palvelinohjelmiston versio 2.6.0 (julkaistu 20. syyskuuta 2022) otti HTTP/3:n oletuksena käyttöön.
* 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.  Nginxin valmiiksi käännetyt versiot HTTP/3-tuella julkaistiin helmikuussa 2023. 
* Cloudflare on luonut korjauksen nginxille, joka lisää sen kehittämän HTTP/3-kirjasto Quichen siihen. 
* Microsoft IIS:n tuki HTTP/3:lle lisättiin Windows Server 2022:ssa ja Windows 11:ssa.
* HAProxy tukee HTTP/3:a versiosta 2.6 lähtien (julkaistu 31. toukokuuta 2022)  

## Lähteet