HTTP/3
| 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]
History[edit]
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.
Comparison with HTTP/1.1 and HTTP/2[edit]
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.
Implementations[edit]
Client[edit]
Browser[edit]
| 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 | – | – | |
Libraries[edit]
Open-source libraries that implement client or server logic for QUIC and HTTP/3 include[21]
Server[edit]
- On 7 June 2021, LiteSpeed Web Server (and OpenLiteSpeed) 6.0.2 was released and became the first version to enable HTTP/3 by default.[27]
- The Caddy web server has experimental support for HTTP/3 as of 2.0 beta 17.[28]
- Nginx support for HTTP/3 is being worked on. A technology preview of nginx with HTTP/3 support was released in June 2020.[29]
- Cloudflare distributes a patch for nginx that integrates the quiche HTTP/3 library into it.[30]
- Microsoft IIS support for HTTP/3 is enabled natively with Windows Server 2022/Windows 11.[31]
See also[edit]
References[edit]
- ^ "Cloudflare HTTP/3".
{{cite web}}: CS1 maint: url-status (link) - ^ Iyengar, Jana; Thomson, Martin (May 2021). QUIC: A UDP-Based Multiplexed and Secure Transport.
- ^ "HTTP/3". Retrieved 6 June 2022.
- ^ "HTTP/3 is Fast". Request Metrics. Retrieved 1 July 2022.
- ^ a b c d e "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 2 May 2022.
- ^ "Usage of HTTP/3 for websites". World Wide Web Technology Surveys. W3Techs. Retrieved 12 February 2022.
- ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 8 April 2021.
- ^ a b c Damjanovic, Dragana (16 April 2021). "QUIC and HTTP/3 Support now in Firefox Nightly and Beta". Mozilla Hacks – the Web developer blog. Retrieved 17 April 2021.
{{cite web}}: CS1 maint: url-status (link) - ^ a b "Safari 14 Release Notes". developer.apple.com. Retrieved 4 December 2020.
- ^ Shade, Robbie (8 July 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.
- ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 8 April 2021.
- ^ 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". webkit.org. 8 April 2020. Retrieved 7 August 2020.
- ^ Ng, Gary (23 June 2020). "Apple's Safari Adds Support for HTTP3 in iOS 14 and macOS 11". iphoneincanada.ca. Retrieved 25 June 2021.
- ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 9 April 2021.
- ^ "Firefox Release Owners - MozillaWiki". wiki.mozilla.org. Retrieved 9 April 2021.
- ^ "QUIC Implementations". GitHub. Retrieved 8 April 2021.
{{cite web}}: CS1 maint: url-status (link) - ^ "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.
- ^ "HTTP/3 support in .NET 6". 17 September 2021. Retrieved 17 September 2021.
- ^ "HTTP/3 support in .NET 6". .NET Blog. 17 September 2021. Retrieved 12 January 2022.
- ^ "LiteSpeed Web Server Release Log - LiteSpeed Technologies". www.litespeedtech.com. Retrieved 12 February 2022.
Enable HTTP/3 v1 by default.
- ^ "Release 2.0 beta 17 · caddyserver/caddy". Github. 13 March 2020. Retrieved 11 August 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.
- ^ Tratcher. "Use ASP.NET Core with HTTP/3 on IIS". docs.microsoft.com. Retrieved 29 April 2022.