HTTP/3

HTTP/3
Międzynarodowy standard Biskup, Mike; Akamai. "RFC 9114: HTTP/3" . edytor rfc . Źródło 6 czerwca 2022 r . (HTTP/3 korzysta również z kompletnego protokołu QUIC opisanego w RFC 9000 i pokrewnych dokumentach RFC, takich jak RFC 9001)
Opracowany przez IETF
wprowadzony   RFC9114 _
Strona internetowa https://quicwg.org/

  HTTP/3 to trzecia główna wersja protokołu Hypertext Transfer Protocol używana do wymiany informacji w sieci World Wide Web , uzupełniająca powszechnie stosowane protokoły HTTP/1.1 i HTTP/2 . W przeciwieństwie do poprzednich wersji, które opierały się na dobrze znanym protokole TCP (opublikowanym w 1974 r.), HTTP/3 wykorzystuje QUIC , multipleksowany protokół transportowy zbudowany na UDP . 6 czerwca 2022 r. IETF opublikował HTTP/3 jako proponowany standard w RFC 9114 .

HTTP/1 Transport Layer Security Transmission Control Protocol HTTP/2 TLS 1.2 Transmission Control Protocol HTTP/3 TLS 1.3 QUIC User Datagram Protocol Internet Protocol
About this image
Stos protokołów HTTP/3 w porównaniu z HTTP/1.1 i HTTP/2

HTTP/3 wykorzystuje podobną semantykę w porównaniu z wcześniejszymi wersjami protokołu, w tym te same metody żądania , kody statusu i pola komunikatów , ale inaczej je koduje i utrzymuje stan sesji. Jednak częściowo ze względu na przyjęcie przez protokół QUIC, HTTP/3 ma mniejsze opóźnienia i ładuje się szybciej w rzeczywistych zastosowaniach w porównaniu z poprzednimi wersjami: w niektórych przypadkach ponad 3 razy szybciej niż w przypadku HTTP/1.1 (który pozostaje jedynym wersja wdrożona przez wiele stron internetowych).

HTTP/3 jest obsługiwany przez 75% przeglądarek internetowych (i 83% przeglądarek internetowych „śledzonych” na komputery stacjonarne) oraz 26% z 10 milionów najpopularniejszych witryn. Jest obsługiwany przez Chromium (i projekty pochodne, w tym Google Chrome , Microsoft Edge , Samsung Internet i Opera ) od kwietnia 2020 r., a przez Mozillę Firefox od maja 2021 r. Safari 14 (na macOS Big Sur i iOS 14 oraz „jest głównym Nowa funkcja w iOS 15 "; dla aplikacji) zaimplementował protokół, ale domyślnie pozostaje on wyłączony .

Historia

HTTP/3 wywodzi się z projektu internetowego przyjętego przez grupę roboczą QUIC. Pierwotna propozycja nosiła nazwę „HTTP/2 Semantics using The QUIC Transport Protocol”, a później przemianowano ją na „Hypertext Transfer Protocol (HTTP) over QUIC”.

W dniu 28 października 2018 r. W dyskusji na liście mailingowej Mark Nottingham, przewodniczący grup roboczych IETF HTTP i QUIC, zaproponował zmianę nazwy HTTP-over-QUIC na HTTP/3, aby „wyraźnie zidentyfikować to jako kolejne powiązanie semantyki HTTP z protokołem przewodowym [...] więc ludzie rozumieją jego oddzielenie od QUIC”. Propozycja Nottingham została zaakceptowana przez innych członków IETF kilka dni później. Grupa robocza HTTP została powołana, aby pomagać grupie roboczej QUIC podczas projektowania HTTP/3, a następnie przejąć odpowiedzialność za konserwację po publikacji.

Obsługa HTTP/3 została dodana do Chrome (kompilacja Canary) we wrześniu 2019 r., a następnie ostatecznie osiągnęła stabilne wersje, ale została wyłączona przez flagę funkcji. Został włączony domyślnie w kwietniu 2020 r. Firefox dodał obsługę HTTP/3 w listopadzie 2019 r. Za pomocą flagi funkcji i zaczął włączać ją domyślnie w kwietniu 2021 r. W przeglądarce Firefox 88. Eksperymentalna obsługa HTTP/3 została dodana do Safari Technology Preview w kwietniu 8, 2020 i została dołączona do Safari 14, która jest dostarczana z iOS 14 i macOS 11 , ale nadal jest domyślnie wyłączona od Safari 16, zarówno w systemie macOS, jak i iOS. [ potrzebne źródło ]

Porównanie z HTTP/1.1 i HTTP/2

Semantyka HTTP jest spójna we wszystkich wersjach: te same metody żądania , kody stanu i pola komunikatów są zazwyczaj stosowane we wszystkich wersjach. Różnice dotyczą mapowania tych semantyk do podstawowych transportów. Zarówno HTTP/1.1, jak i HTTP/2 używają protokołu TCP jako środka transportu. HTTP/3 wykorzystuje QUIC , protokół sieciowy warstwy transportowej , który wykorzystuje kontrolę przeciążenia przestrzeni użytkownika za pośrednictwem protokołu UDP (User Datagram Protocol ). Przejście na QUIC ma na celu rozwiązanie głównego problemu HTTP/2 o nazwie „ blokowanie nagłówka linii ”: ponieważ równoległa natura multipleksowania HTTP/2 nie jest widoczna dla mechanizmów odzyskiwania strat TCP , zagubiony lub uporządkowany pakiet powoduje zatrzymanie wszystkich aktywnych transakcji , niezależnie od tego, czy na tę transakcję wpłynął utracony pakiet Ponieważ QUIC zapewnia natywne multipleksowanie, utracone pakiety mają wpływ tylko na strumienie, w których utracono dane.

Proponowane rekordy zasobów DNS SVCB (powiązanie usługi) i HTTPS umożliwiłyby połączenie bez uprzedniego odbierania nagłówka Alt-Svc przez poprzednie wersje HTTP, usuwając w ten sposób 1 RTT uzgadniania TCP. Istnieje obsługa klientów dla rekordów zasobów HTTPS od czasu, gdy Firefox 92, iOS 14 zgłosił obsługę Safari 14, a Chromium obsługuje to za flagą.

Implementacje

Klient

Przeglądarka

Obsługa przeglądarki dla protokołu HTTP/3
Przeglądarka Zaimplementowana wersja (domyślnie wyłączona) Dostarczona wersja (domyślnie włączona) Komentarz
Chrom Stabilna konstrukcja (79) grudzień 2019 r 87 kwiecień 2020 r Wcześniejsze wersje zawierały inne wersje robocze QUIC
Krawędź Stabilna konstrukcja (79) grudzień 2019 r 87 kwiecień 2020 r Edge 79 był pierwszą wersją opartą na Chromium
Firefoxa Stabilna wersja (72.0.1) styczeń 2020 r 88 kwiecień 2021 r
Safari Przegląd technologii Safari 104 kwiecień 2020 r

Biblioteki

Biblioteki typu open source , które implementują logikę klienta lub serwera dla QUIC i HTTP/3 obejmują

Biblioteki implementujące HTTP/3
Nazwa Klient serwer Język programowania Firma Magazyn
lsquic Tak Tak C LiteSpeed https://github.com/litespeedtech/lsquic
nghttp3 Tak Tak C https://github.com/ngtcp2/nghttp3
woda NIE Tak C https://github.com/h2o/h2o
libcurl Tak NIE C https://github.com/curl/curl
MsQuic Tak Tak C Microsoftu https://github.com/microsoft/msquic
pełnomocnik Tak Tak C++ Facebook https://github.com/facebook/proxygen#quic-and-http3
Cronet Tak Tak C++ Google https://github.com/chromium/chromium/tree/main/net/quic
.INTERNET Tak Tak C# (przy użyciu MsQuic) Microsoftu https://github.com/dotnet
szybko Tak Tak Iść https://github.com/quic-go/quic-go
http3 Tak Tak Haskella https://github.com/kazu-yamamoto/http3
Kwik Tak Tak Jawa https://github.com/ptrd/kwik
Flupke Tak Tak Jawa https://bitbucket.org/pjtr/flupke
aioquic Tak Tak Pyton https://github.com/aiortc/aioquic
quiche Tak Tak Rdza Rozbłysk chmur https://github.com/cloudflare/quiche
neko Tak Tak Rdza Mozilla https://github.com/mozilla/neqo
Quinn Tak Tak Rdza https://github.com/quinn-rs/quinn
s2n-quic Tak Tak Rdza Usługi sieciowe Amazona https://github.com/aws/s2n-quic

serwer

Zobacz też

Linki zewnętrzne