International standard | Bishop, Mike; Akamai. "RFC 9114: HTTP/3". rfc-editor. Retrieved 6 June 2022. (HTTP/3 also uses the completed QUIC protocol described in RFC 9000 and related RFCs such as RFC 9001) |
---|---|
Developed by | IETF |
Introduced | RFC 9114 |
Website | https://quicwg.org/ |
HTTP/3 is the third major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web, alongside HTTP/1.1 and HTTP/2. HTTP/3 always runs over QUIC relying on UDP (as opposed to TCP used by earlier revisions of HTTP). QUIC specification was published as RFC 9000.[1][2] On 6 June 2022, IETF standardized HTTP/3 as RFC 9114.[3]
HTTP/3 uses the same semantics as the earlier revisions, including the same request methods, status codes, and message fields, but encodes them differently and maintains session state differently.
HTTP/3 has lower latency for real-world web pages, if enabled on the server, load faster than with HTTP/2, and even faster than HTTP/1.1, in some cases over 3× faster than HTTP/1.1 (which is still commonly only enabled).[4] That's in part because the TCP (of TCP/IP), is no longer used, as in the older standards.
HTTP/3 is already supported by 73% of running web browsers,[5] and according to W3Techs 25% of the top 10 million websites.[6] It has been supported by Chromium (including Google Chrome, Microsoft Edge, Samsung Internet, and Opera which are based on it, and Chrome for Android)[7] since April 2020 and by Mozilla Firefox since May 2021.[5][8] Safari 14 (on macOS Big Sur and iOS 14) has also implemented the protocol but it is disabled by default (also in Safari 15).[9]
HTTP/3 originates from an Internet Draft adopted by the QUIC working group. The original proposal was named "HTTP/2 Semantics Using The QUIC Transport Protocol",[10] and later renamed "Hypertext Transfer Protocol (HTTP) over QUIC".[11]
On 28 October 2018 in a mailing list discussion, Mark Nottingham, Chair of the IETF HTTP and QUIC Working Groups, proposed renaming 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".[12] Nottingham's proposal was accepted by fellow IETF members a few days later. The HTTP working group was chartered to assist the QUIC working group during the design of HTTP/3, then assume responsibility for maintenance after publication.[13]
Support for HTTP/3 was added to Chrome (Canary build) in September 2019 and then eventually reached stable builds, but was disabled by a feature flag. It was enabled by default in April 2020.[14] Firefox added support for HTTP/3 in November 2019 through a feature flag[5][15][16] and started enabling it by default in April 2021 in Firefox 88.[5][8] Experimental support for HTTP/3 was added to Safari Technology Preview on April 8, 2020[17] and was included with Safari 14 that ships with iOS 14 and macOS 11,[9] but is still disabled by default.[18] The situation remained the same with Safari 15.
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 which uses user space congestion control 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.
Browser | Version implemented (disabled by default) | Version shipped (enabled by default) | Comment | ||
---|---|---|---|---|---|
Chrome | Stable build (79) | December 2019 | 87[5] | April 2020[19] | Earlier versions implemented other drafts of QUIC |
Edge | Stable build (79) | December 2019 | 87 | April 2020 | Edge 79 was the first version based on Chromium |
Firefox | Stable build (72.0.1) | January 2020 | 88[8] | April 2021[20] | |
Safari | Safari Technology Preview 104 | April 2020 | – | – |
Open-source libraries that implement client or server logic for QUIC and HTTP/3 include[21]