HTTP/3
HTTP/3 is the third and upcoming major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web, alongside HTTP/1.1 and HTTP/2.[1]
International standard | Hypertext Transfer Protocol Version 3 (HTTP/3) (draft) |
---|---|
Developed by | IETF |
Introduced | Internet-Draft as of January 2021 |
HTTP semantics are consistent across versions: the same request methods, status codes, and message fields are typically applicable to all versions. The differences are in the mapping of these semantics to underlying transports. Both HTTP/1.1 and HTTP/2 use TCP as their transport. HTTP/3 uses QUIC, a transport layer network protocol developed initially by Google where user space congestion control is used over the User Datagram Protocol (UDP). The switch to QUIC aims to fix a major problem of HTTP/2 called "head-of-line blocking": 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. Because QUIC provides native multiplexing, lost packets only impact the streams where data has been lost.
As of January 2021, the HTTP/3 protocol is an Internet Draft and has multiple implementations. Experimental versions of Microsoft Edge, Mozilla Firefox, and Google Chrome support HTTP/3 behind a feature flag (for desktop as well as mobile versions of Firefox and Safari), and Safari 14 on macOS Big Sur enables support for HTTP/3 by default.[2] Currently, 6.53% of desktop web browsers support HTTP/3, while no mobile browsers support it.[2] According to W3Techs, 4.2% of the top 10 million websites support HTTP/3,[3] after support peaked at 7.5% in October.
History
HTTP/3 is an Internet draft adopted by the QUIC working group. The original proposal was named "HTTP/2 Semantics Using The QUIC Transport Protocol",[4] and later named "Hypertext Transfer Protocol (HTTP) over QUIC".[5]
On 28 October 2018 in a mailing list discussion, Mark Nottingham, Chair of the IETF HTTP and QUIC Working Groups, proposed 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".[6] Nottingham's proposal was accepted by fellow IETF members a few days later in November 2018. The HTTP working group is chartered to assist the QUIC working group during the design of HTTP/3, then assume responsibility for maintenance after publication.[7]
Support for HTTP/3 was added to Chrome (Canary build) in September 2019 and then eventually reached stable builds, but is disabled by a feature flag. As of 2021, HTTP/3 has non-default support in stable versions of Chrome and Firefox and can be enabled with a configuration change.[2][8][9] Experimental support for HTTP/3 was added to Safari Technology Preview on April 8, 2020[10] and was officially released with Safari 14 that ships with iOS 14 and macOS 11.[11]
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 | September 2020 |
Edge | Edge (Canary build) | May 2020[12] | TBA |
Libraries
Open source libraries that implement client or server logic for QUIC and HTTP/3 are available.[13]
Name | Client/Server | Programming language | Company | Repository |
---|---|---|---|---|
quiche | Both | Rust | Cloudflare | https://github.com/cloudflare/quiche |
neqo | Both | Rust | Mozilla | https://github.com/mozilla/neqo |
quinn | Both | Rust | https://github.com/quinn-rs/quinn | |
proxygen | Server | C++ | https://github.com/facebook/proxygen#quic-and-http3 | |
Cronet | Both | C++ | https://github.com/chromium/chromium/tree/master/net/quic | |
lsquic | Both | C | LiteSpeed | https://github.com/litespeedtech/lsquic |
nghttp3 | partial | C | https://github.com/ngtcp2/nghttp3 | |
h2o | Server | C | https://github.com/h2o/h2o | |
libcurl[14][15] | Client | C | https://github.com/curl/curl | |
MsQuic[16] | Both | C | Microsoft | https://github.com/microsoft/msquic |
Flupke | Client | Java | https://bitbucket.org/pjtr/flupke | |
aioquic | Both | Python | https://github.com/aiortc/aioquic | |
quic-go | Both | Go | https://github.com/lucas-clemente/quic-go | |
http3 | Both | Haskell | https://github.com/kazu-yamamoto/http3 |
Server
- Litespeed's Web Server HTTP/3 draft 31 support.[17]
- Nginx support for HTTP/3 is slated for the 1.19 release.[18] A technology preview of nginx with HTTP/3 support has been released in June 2020.[19]
- Cloudflare distributes an nginx patch integrating the quiche HTTP/3 library into it.[20]
- The Caddy web server has experimental support for HTTP/3 as of 2.0 beta 17.[21]
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.[22]
References
- Bishop, Mike (15 December 2020). Hypertext Transfer Protocol Version 3 (HTTP/3). IETF. I-D draft-ietf-quic-http.
- "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 27 January 2021.
- "Usage of HTTP/3 for websites". World Wide Web Technology Surveys. W3Techs. Retrieved 27 January 2021.
- Shade, Robbie (23 November 2016). HTTP/2 Semantics Using The QUIC Transport Protocol. IETF. I-D draft-shade-quic-http2-mapping.
- 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.
- "Hypertext Transfer Protocol Charter". ietf.org. Retrieved 2 September 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 4 December 2020.
- "Microsoft Edge · Cloudflare HTTP/3 docs". developers.cloudflare.com. Retrieved 27 January 2021.
- 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.
- "Milestone nginx-1.19". trac.nginx.org. Retrieved 30 September 2020.
- "Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3". NGINX. 10 June 2020. Retrieved 11 June 2020.
- "Experiment with HTTP/3 using NGINX and quiche". The Cloudflare Blog. 17 October 2019. Retrieved 9 November 2019.
- "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.