HTTP/3: Difference between revisions
Aspenluxxxy (talk | contribs) m I got the Caddy link wrong, sorry. |
Drlellinger (talk | contribs) |
||
Line 28: | Line 28: | ||
! colspan="2" |Version implemented |
! colspan="2" |Version implemented |
||
(disabled by default) |
(disabled by default) |
||
!Version shipped |
! colspan="2" |Version shipped |
||
(enabled by default) |
(enabled by default) |
||
!Date |
|||
|- |
|- |
||
|[[Google Chrome|Chrome]] |
|[[Google Chrome|Chrome]] |
Revision as of 13:04, 19 August 2020
![]() | This article provides insufficient context for those unfamiliar with the subject.(November 2019) |
International standard | Hypertext Transfer Protocol Version 3 (HTTP/3) (draft) |
---|---|
Developed by | IETF |
Introduced | Internet-Draft as of August 2020[update] |
Website | https://httpwg.org/specs/rfc9114.html |
HTTP/3 is the upcoming third major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web, succeeding HTTP/2.[1][2]
HTTP/3 uses the same semantics as HTTP/1.1 and HTTP/2 (the same operations like GET and POST) and same response codes (like 200 or 404) but uses a different transport protocol aware of these semantics and capable of recovering from packet loss with minimal performance loss. HTTP/3 is developed to fix the major problem of HTTP/2 called "head-of-line blocking" that arises from reliance on TCP: because the parallel nature of HTTP/2's multiplexing is not visible to TCP's loss recovery mechanisms, a lost or reordered packet causes all active transactions to experience a stall regardless of whether that transaction was impacted by the lost packet.
As of August 2020[update], HTTP/3 protocol is an Internet-Draft and has multiple implementations, and according to W3Techs 6.7% of the top 10 million websites support HTTP/3.[3] Stable versions of Firefox and Chrome support HTTP/3 in its current form, but have it disabled by default. Safari 14 will ship with HTTP/3 enabled by default.
History
HTTP/3 is a draft based on a previous RFC draft, then named "Hypertext Transfer Protocol (HTTP) over QUIC".[4] QUIC is a transport layer network protocol developed initially by Google where user space congestion control is used over the User Datagram Protocol (UDP).
On 28 October 2018 in a mailing list discussion, Mark Nottingham, Chair of the IETF HTTP and QUIC Working Groups, made the official request to rename HTTP-over-QUIC to HTTP/3, to "clearly identify it as another binding of HTTP semantics to the wire protocol ... so people understand its separation from QUIC" and to pass its development from the QUIC Working Group to the HTTP Working Group after finalizing and publishing the draft.[5] Nottingham's proposal was accepted by fellow IETF members a few days later in November 2018.[4]
Support for HTTP/3 was added to Chrome (Canary build) in September 2019 and then eventually reached stable builds, but is disabled by a flag. As of 2020 HTTP/3 has non-default support in stable versions of Chrome and Firefox and can be enabled with a configuration change.[6][7][8] Experimental support for HTTP/3 was added to Safari Technology Preview on April 8, 2020[9] and will be officially released with Safari 14 that ships with upcoming iOS 14 and macOS 11.[10]
Implementations
Browser
Browser | Version implemented
(disabled by default) |
Version shipped
(enabled by default) | ||
---|---|---|---|---|
Chrome | Stable build (79) | December 2019 | TBA | |
Firefox | Stable build (72.0.1) | January 2020 | TBA | |
Safari | Safari Technology Preview 104 | April 2020 | Safari 14 | TBA |
Edge | Edge (Canary build) | 2020[11] | TBA |
Libraries
Open source libraries that implement client or server logic for QUIC and HTTP/3 are available.[12]
Name | Programming language | Company | Repository |
---|---|---|---|
quiche | Rust | Cloudflare | https://github.com/cloudflare/quiche |
neqo | Rust | Mozilla | https://github.com/mozilla/neqo |
proxygen | C++ | https://github.com/facebook/proxygen#quic-and-http3 | |
Cronet | C++ | https://github.com/chromium/chromium/tree/master/net/quic | |
lsquic | C | LiteSpeed | https://github.com/litespeedtech/lsquic |
nghttp3 | C | https://github.com/ngtcp2/nghttp3 | |
h2o | C | https://github.com/h2o/h2o | |
libcurl[13][14] | C | https://github.com/curl/curl | |
MsQuic[15] | C | Microsoft | https://github.com/microsoft/msquic |
Flupke | Java | https://bitbucket.org/pjtr/flupke | |
aioquic | Python | https://github.com/aiortc/aioquic | |
quic-go | Go | https://github.com/lucas-clemente/quic-go | |
http3 | Haskell | https://github.com/kazu-yamamoto/http3 |
Litespeed's Web Server supports HTTP/3 natively.[16] Cloudflare's quiche library can be used as a patch to nginx.[17] Support for HTTP/3 is slated for the 1.17 release of nginx.[18] A technology preview of nginx with HTTP/3 support has been released in June 2020.[19] The Caddy webserver has experimental support for HTTP/3 as of 2.0 beta 17.[20]
There are a number of libraries that implement an older draft of the protocol or Google's versions of QUIC (e.g. Q046 used in Chrome 76), such as nghttp3.[21]
See also
References
- ^ Bishop, M. (2 July 2020). "Hypertext Transfer Protocol Version 3 (HTTP/3)". quicwg.org. Retrieved 1 July 2020.
- ^ Bishop, Mike (21 February 2020). Hypertext Transfer Protocol Version 3 (HTTP/3). IETF. I-D draft-ietf-quic-http-27.
- ^ "Usage of HTTP/3 for websites". World Wide Web Technology Surveys. W3Techs. Retrieved 8 August 2020.
- ^ a b Cimpanu, Catalin (12 November 2018). "HTTP-over-QUIC to be renamed HTTP/3 | ZDNet". ZDNet. Retrieved 12 November 2018.
- ^ Nottingham, Mark (28 October 2018). "Identifying our deliverables". IETF Mail Archive.
- ^ "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 19 January 2020.
- ^ Daniel, Stenberg. "Daniel Stenberg announces HTTP/3 support in Firefox Nightly". Twitter. Retrieved 5 November 2019.
- ^ Cimpanu, Catalin (26 September 2019). "Cloudflare, Google Chrome, and Firefox add HTTP/3 support". ZDNet. Retrieved 27 September 2019.
- ^ "Release Notes for Safari Technology Preview 104". 8 April 2020. Retrieved 7 August 2020.
- ^ "Apple Developer Documentation". developer.apple.com. Retrieved 23 June 2020.
- ^ Inc, Cloudflare. "Microsoft Edge - HTTP/3 Docs". developers.cloudflare.com. Retrieved 2 May 2020.
{{cite web}}
:|last=
has generic name (help) - ^ Internet-Drafts that make up the base QUIC specification: quicwg/base-drafts, IETF QUIC WG, 12 November 2019, retrieved 13 November 2019
- ^ "First HTTP/3 with curl". Daniel Stenberg. 5 August 2019. Retrieved 2 October 2019.
- ^ "cURL HTTP3 wiki". Daniel Stenberg. 26 September 2019. Retrieved 2 October 2019.
- ^ "MsQuic is Open Source". 28 April 2020. Retrieved 28 April 2020.
- ^ "LiteSpeed Web Server Release Log". LiteSpeed Web Server Release Log. 17 April 2020. Retrieved 26 June 2020.
- ^ "Experiment with HTTP/3 using NGINX and quiche". The Cloudflare Blog. 17 October 2019. Retrieved 9 November 2019.
- ^ "Milestone nginx-1.17". trac.nginx.org. Retrieved 9 November 2019.
{{cite web}}
: CS1 maint: url-status (link) - ^ "Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3". NGINX. 10 June 2020. Retrieved 11 June 2020.
- ^ "Release 2.0 beta 17 · caddyserver/caddy". Github. 13 March 2020. Retrieved 11 August 2020.
- ^ "ngtcp2/nghttp3". 6 August 2020. Retrieved 7 August 2020 – via GitHub.