Jump to content

HTTP/3: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m v2.04b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation)
Winne (talk | contribs)
m not a draft any more; Safari 15 still doesn't enable it by default
Line 23: Line 23:
HTTP/3 uses the same semantics as the earlier revisions, including the same [[Hypertext_Transfer_Protocol#Request_methods|request methods]], [[Hypertext_Transfer_Protocol#Response status codes|status codes]], and [[List_of_HTTP_header_fields|message fields]], but encodes them differently and maintains session state differently.
HTTP/3 uses the same semantics as the earlier revisions, including the same [[Hypertext_Transfer_Protocol#Request_methods|request methods]], [[Hypertext_Transfer_Protocol#Response status codes|status codes]], and [[List_of_HTTP_header_fields|message fields]], but encodes them differently and maintains session state differently.


HTTP/3 is already supported by 73% of running web browsers,<ref name="canIuse" /> and according to W3Techs 25% of the top 10 million websites.<ref name="W3Techs">{{cite web|title=Usage of HTTP/3 for websites|url=https://w3techs.com/technologies/details/ce-http3|access-date=12 February 2022|website=World Wide Web Technology Surveys|publisher=W3Techs}}</ref> It has been supported by [[Chromium (web browser)|Chromium]] (including [[Google Chrome]], [[Microsoft Edge]], [[Samsung Internet]], and [[Opera (web browser)|Opera]] which are based on it, and Chrome for Android)<ref>{{Cite web|title=Enabling QUIC in tip-of-tree|url=https://groups.google.com/a/chromium.org/g/net-dev/c/5M9Z5mtvg_Y/m/iw9co1VrBQAJ|access-date=2021-04-08|website=groups.google.com}}</ref> since April 2020 and by [[Mozilla Firefox]] since May 2021.<ref name="canIuse" /><ref name=":2">{{Cite web|last=Damjanovic|first=Dragana|date=16 April 2021|title=QUIC and HTTP/3 Support now in Firefox Nightly and Beta|url=https://hacks.mozilla.org/2021/04/quic-and-http-3-support-now-in-firefox-nightly-and-beta|url-status=live|access-date=2021-04-17|website=Mozilla Hacks – the Web developer blog|language=en-US}}</ref> [[Safari (web browser)|Safari]] 14 (on [[macOS Big Sur]] and [[iOS 14]]) has also implemented the protocol but it is [[feature toggle|disabled by default]].<ref name="safari14">{{Cite web|title=Safari 14 Release Notes|url=https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes|access-date=4 December 2020|website=developer.apple.com}}</ref>
HTTP/3 is already supported by 73% of running web browsers,<ref name="canIuse" /> and according to W3Techs 25% of the top 10 million websites.<ref name="W3Techs">{{cite web|title=Usage of HTTP/3 for websites|url=https://w3techs.com/technologies/details/ce-http3|access-date=12 February 2022|website=World Wide Web Technology Surveys|publisher=W3Techs}}</ref> It has been supported by [[Chromium (web browser)|Chromium]] (including [[Google Chrome]], [[Microsoft Edge]], [[Samsung Internet]], and [[Opera (web browser)|Opera]] which are based on it, and Chrome for Android)<ref>{{Cite web|title=Enabling QUIC in tip-of-tree|url=https://groups.google.com/a/chromium.org/g/net-dev/c/5M9Z5mtvg_Y/m/iw9co1VrBQAJ|access-date=2021-04-08|website=groups.google.com}}</ref> since April 2020 and by [[Mozilla Firefox]] since May 2021.<ref name="canIuse" /><ref name=":2">{{Cite web|last=Damjanovic|first=Dragana|date=16 April 2021|title=QUIC and HTTP/3 Support now in Firefox Nightly and Beta|url=https://hacks.mozilla.org/2021/04/quic-and-http-3-support-now-in-firefox-nightly-and-beta|url-status=live|access-date=2021-04-17|website=Mozilla Hacks – the Web developer blog|language=en-US}}</ref> [[Safari (web browser)|Safari]] 14 (on [[macOS Big Sur]] and [[iOS 14]]) has also implemented the protocol but it is [[feature toggle|disabled by default]] (also in Safari 15).<ref name="safari14">{{Cite web|title=Safari 14 Release Notes|url=https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes|access-date=4 December 2020|website=developer.apple.com}}</ref>


On 6 June 2022, IETF standardized HTTP/3 as RFC9114.<ref>{{cite web|url=https://datatracker.ietf.org/doc/rfc9114/|title=HTTP/3|accessdate=2022-06-06|language=en-US}}</ref>
On 6 June 2022, IETF standardized HTTP/3 as RFC9114.<ref>{{cite web|url=https://datatracker.ietf.org/doc/rfc9114/|title=HTTP/3|accessdate=2022-06-06|language=en-US}}</ref>


== History ==
== 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",<ref>{{Cite IETF|title=HTTP/2 Semantics Using The QUIC Transport Protocol|draft=draft-shade-quic-http2-mapping|last=Shade|first=Robbie|date=8 July 2016|publisher=[[Internet Engineering Task Force|IETF]]}}</ref> and later named "Hypertext Transfer Protocol (HTTP) over QUIC".<ref name=":0">{{Cite news|last=Cimpanu|first=Catalin|date=12 November 2018|title=HTTP-over-QUIC to be renamed HTTP/3 {{!}} ZDNet|language=en|work=ZDNet|url=https://www.zdnet.com/article/http-over-quic-to-be-renamed-http3/|access-date=12 November 2018}}</ref>
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",<ref>{{Cite IETF|title=HTTP/2 Semantics Using The QUIC Transport Protocol|draft=draft-shade-quic-http2-mapping|last=Shade|first=Robbie|date=8 July 2016|publisher=[[Internet Engineering Task Force|IETF]]}}</ref> and later renamed "Hypertext Transfer Protocol (HTTP) over QUIC".<ref name=":0">{{Cite news|last=Cimpanu|first=Catalin|date=12 November 2018|title=HTTP-over-QUIC to be renamed HTTP/3 {{!}} ZDNet|language=en|work=ZDNet|url=https://www.zdnet.com/article/http-over-quic-to-be-renamed-http3/|access-date=12 November 2018}}</ref>


On 28 October 2018 in a mailing list discussion, Mark Nottingham, Chair of the [[Internet Engineering Task Force|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".<ref>{{Cite journal|last=Nottingham|first=Mark|date=28 October 2018|title=Identifying our deliverables|url=https://mailarchive.ietf.org/arch/msg/quic/RLRs4nB1lwFCZ_7k0iuz0ZBa35s|journal=IETF Mail Archive}}</ref> Nottingham's proposal was accepted by fellow IETF members a few days later. 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.<ref>{{Cite web|title=Hypertext Transfer Protocol Charter|url=https://datatracker.ietf.org/doc/charter-ietf-httpbis/08/|access-date=2020-09-02|website=ietf.org}}</ref>
On 28 October 2018 in a mailing list discussion, Mark Nottingham, Chair of the [[Internet Engineering Task Force|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".<ref>{{Cite journal|last=Nottingham|first=Mark|date=28 October 2018|title=Identifying our deliverables|url=https://mailarchive.ietf.org/arch/msg/quic/RLRs4nB1lwFCZ_7k0iuz0ZBa35s|journal=IETF Mail Archive}}</ref> 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.<ref>{{Cite web|title=Hypertext Transfer Protocol Charter|url=https://datatracker.ietf.org/doc/charter-ietf-httpbis/08/|access-date=2020-09-02|website=ietf.org}}</ref>


Support for HTTP/3 was added to [[Google Chrome|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.<ref>{{Cite web|title=Enabling QUIC in tip-of-tree|url=https://groups.google.com/a/chromium.org/g/net-dev/c/5M9Z5mtvg_Y/m/iw9co1VrBQAJ|access-date=2021-04-08|website=groups.google.com}}</ref> Firefox added support for HTTP/3 in November 2019 through a feature flag<ref name="canIuse">{{Cite web|title=Can I use... Support tables for HTML5, CSS3, etc|url=https://caniuse.com/http3|access-date=2022-05-02|website=caniuse.com}}</ref><ref>{{cite web|last1=Daniel|first1=Stenberg|title=Daniel Stenberg announces HTTP/3 support in Firefox Nightly|url=https://twitter.com/bagder/status/1191482712739196928|access-date=5 November 2019|website=Twitter}}</ref><ref>{{cite web|last=Cimpanu|first=Catalin|date=26 Sep 2019|title=Cloudflare, Google Chrome, and Firefox add HTTP/3 support|url=https://www.zdnet.com/article/cloudflare-google-chrome-and-firefox-add-http3-support/|access-date=27 Sep 2019|website=ZDNet|df=dmy-all}}</ref> and started enabling it by default in April 2021 in Firefox 88.<ref name="canIuse" /><ref name=":2" /> Experimental support for HTTP/3 was added to Safari Technology Preview on April 8, 2020<ref>{{Cite web|url=https://webkit.org/blog/10264/release-notes-for-safari-technology-preview-104/|title=Release Notes for Safari Technology Preview 104|date=8 April 2020|access-date=7 August 2020|website=webkit.org}}</ref> and was included with Safari 14 that ships with [[iOS 14]] and [[macOS 11]],<ref name="safari14" /> but is still disabled by default.<ref>{{Cite web|title=Apple’s Safari Adds Support for HTTP3 in iOS 14 and macOS 11|url=https://www.iphoneincanada.ca/news/apple-safari-http3-ios-14/|date=23 June 2020|access-date=25 June 2021|website=iphoneincanada.ca|last=Ng|first=Gary}}</ref>
Support for HTTP/3 was added to [[Google Chrome|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.<ref>{{Cite web|title=Enabling QUIC in tip-of-tree|url=https://groups.google.com/a/chromium.org/g/net-dev/c/5M9Z5mtvg_Y/m/iw9co1VrBQAJ|access-date=2021-04-08|website=groups.google.com}}</ref> Firefox added support for HTTP/3 in November 2019 through a feature flag<ref name="canIuse">{{Cite web|title=Can I use... Support tables for HTML5, CSS3, etc|url=https://caniuse.com/http3|access-date=2022-05-02|website=caniuse.com}}</ref><ref>{{cite web|last1=Daniel|first1=Stenberg|title=Daniel Stenberg announces HTTP/3 support in Firefox Nightly|url=https://twitter.com/bagder/status/1191482712739196928|access-date=5 November 2019|website=Twitter}}</ref><ref>{{cite web|last=Cimpanu|first=Catalin|date=26 Sep 2019|title=Cloudflare, Google Chrome, and Firefox add HTTP/3 support|url=https://www.zdnet.com/article/cloudflare-google-chrome-and-firefox-add-http3-support/|access-date=27 Sep 2019|website=ZDNet|df=dmy-all}}</ref> and started enabling it by default in April 2021 in Firefox 88.<ref name="canIuse" /><ref name=":2" /> Experimental support for HTTP/3 was added to Safari Technology Preview on April 8, 2020<ref>{{Cite web|url=https://webkit.org/blog/10264/release-notes-for-safari-technology-preview-104/|title=Release Notes for Safari Technology Preview 104|date=8 April 2020|access-date=7 August 2020|website=webkit.org}}</ref> and was included with Safari 14 that ships with [[iOS 14]] and [[macOS 11]],<ref name="safari14" /> but is still disabled by default.<ref>{{Cite web|title=Apple’s Safari Adds Support for HTTP3 in iOS 14 and macOS 11|url=https://www.iphoneincanada.ca/news/apple-safari-http3-ios-14/|date=23 June 2020|access-date=25 June 2021|website=iphoneincanada.ca|last=Ng|first=Gary}}</ref> The situation remained the same with Safari 15.


== Comparison with HTTP/1.1 and HTTP/2 ==
== Comparison with HTTP/1.1 and HTTP/2 ==

Revision as of 11:30, 9 June 2022

HTTP/3
International standardBishop, 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 byIETF
IntroducedRFC 9114
Websitehttps://httpwg.org/specs/rfc9114.html

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 (not the TCP of TCP/IP, which QUIC is a replacement for), which is completed (and is the heart of HTTP/3), published as RFC 9000.[1][2]

Protocol Stack of HTTP/3 compared to HTTP/1.1 and HTTP/2

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 is already supported by 73% of running web browsers,[3] and according to W3Techs 25% of the top 10 million websites.[4] It has been supported by Chromium (including Google Chrome, Microsoft Edge, Samsung Internet, and Opera which are based on it, and Chrome for Android)[5] since April 2020 and by Mozilla Firefox since May 2021.[3][6] Safari 14 (on macOS Big Sur and iOS 14) has also implemented the protocol but it is disabled by default (also in Safari 15).[7]

On 6 June 2022, IETF standardized HTTP/3 as RFC9114.[8]

History

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",[9] and later renamed "Hypertext Transfer Protocol (HTTP) over QUIC".[10]

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".[11] 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.[12]

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.[13] Firefox added support for HTTP/3 in November 2019 through a feature flag[3][14][15] and started enabling it by default in April 2021 in Firefox 88.[3][6] Experimental support for HTTP/3 was added to Safari Technology Preview on April 8, 2020[16] and was included with Safari 14 that ships with iOS 14 and macOS 11,[7] but is still disabled by default.[17] The situation remained the same with Safari 15.

Comparison with HTTP/1.1 and HTTP/2

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

Client

Browser

Browser support for HTTP/3
Browser Version implemented (disabled by default) Version shipped (enabled by default) Comment
Chrome Stable build (79) December 2019 87[3] April 2020[18] 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[6] April 2021[19]
Safari Safari Technology Preview 104 April 2020  –  –

Libraries

Open-source libraries that implement client or server logic for QUIC and HTTP/3 include[20]

Libraries implementing HTTP/3
Name Client Server Programming language Company Repository
lsquic Yes Yes C LiteSpeed https://github.com/litespeedtech/lsquic
nghttp3 Yes Yes C https://github.com/ngtcp2/nghttp3
h2o No Yes C https://github.com/h2o/h2o
libcurl[21][22] Yes No C https://github.com/curl/curl
MsQuic[23] Yes Yes C Microsoft https://github.com/microsoft/msquic
proxygen Yes Yes C++ Facebook https://github.com/facebook/proxygen#quic-and-http3
Cronet Yes Yes C++ Google https://github.com/chromium/chromium/tree/main/net/quic
.NET[24] Yes Yes C# (using MsQuic)[25] Microsoft https://github.com/dotnet
quic-go Yes Yes Go https://github.com/lucas-clemente/quic-go
http3 Yes Yes Haskell https://github.com/kazu-yamamoto/http3
Kwik Yes Yes Java https://github.com/ptrd/kwik
Flupke Yes No Java https://bitbucket.org/pjtr/flupke
aioquic Yes Yes Python https://github.com/aiortc/aioquic
quiche Yes Yes Rust Cloudflare https://github.com/cloudflare/quiche
neqo Yes Yes Rust Mozilla https://github.com/mozilla/neqo
quinn Yes Yes Rust https://github.com/quinn-rs/quinn

Server

  • 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.[26]
  • The Caddy web server has experimental support for HTTP/3 as of 2.0 beta 17.[27]
  • Nginx support for HTTP/3 is being worked on. A technology preview of nginx with HTTP/3 support was released in June 2020.[28]
  • Cloudflare distributes a patch for nginx that integrates the quiche HTTP/3 library into it.[29]
  • IIS support for HTTP/3 is enabled natively with Windows Server 2022/Windows 11.[30]

See also

References

  1. ^ "Cloudflare HTTP/3".{{cite web}}: CS1 maint: url-status (link)
  2. ^ Iyengar, Jana; Thomson, Martin (May 2021). QUIC: A UDP-Based Multiplexed and Secure Transport.
  3. ^ a b c d e "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 2 May 2022.
  4. ^ "Usage of HTTP/3 for websites". World Wide Web Technology Surveys. W3Techs. Retrieved 12 February 2022.
  5. ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 8 April 2021.
  6. ^ 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)
  7. ^ a b "Safari 14 Release Notes". developer.apple.com. Retrieved 4 December 2020.
  8. ^ "HTTP/3". Retrieved 6 June 2022.
  9. ^ Shade, Robbie (8 July 2016). HTTP/2 Semantics Using The QUIC Transport Protocol. IETF. I-D draft-shade-quic-http2-mapping.
  10. ^ Cimpanu, Catalin (12 November 2018). "HTTP-over-QUIC to be renamed HTTP/3 | ZDNet". ZDNet. Retrieved 12 November 2018.
  11. ^ Nottingham, Mark (28 October 2018). "Identifying our deliverables". IETF Mail Archive.
  12. ^ "Hypertext Transfer Protocol Charter". ietf.org. Retrieved 2 September 2020.
  13. ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 8 April 2021.
  14. ^ Daniel, Stenberg. "Daniel Stenberg announces HTTP/3 support in Firefox Nightly". Twitter. Retrieved 5 November 2019.
  15. ^ Cimpanu, Catalin (26 September 2019). "Cloudflare, Google Chrome, and Firefox add HTTP/3 support". ZDNet. Retrieved 27 September 2019.
  16. ^ "Release Notes for Safari Technology Preview 104". webkit.org. 8 April 2020. Retrieved 7 August 2020.
  17. ^ Ng, Gary (23 June 2020). "Apple's Safari Adds Support for HTTP3 in iOS 14 and macOS 11". iphoneincanada.ca. Retrieved 25 June 2021.
  18. ^ "Enabling QUIC in tip-of-tree". groups.google.com. Retrieved 9 April 2021.
  19. ^ "Firefox Release Owners - MozillaWiki". wiki.mozilla.org. Retrieved 9 April 2021.
  20. ^ "QUIC Implementations". GitHub. Retrieved 8 April 2021.{{cite web}}: CS1 maint: url-status (link)
  21. ^ "First HTTP/3 with curl". Daniel Stenberg. 5 August 2019. Retrieved 2 October 2019.
  22. ^ "cURL HTTP3 wiki". Daniel Stenberg. 26 September 2019. Retrieved 2 October 2019.
  23. ^ "MsQuic is Open Source". 28 April 2020. Retrieved 28 April 2020.
  24. ^ "HTTP/3 support in .NET 6". 17 September 2021. Retrieved 17 September 2021.
  25. ^ "HTTP/3 support in .NET 6". .NET Blog. 17 September 2021. Retrieved 12 January 2022.
  26. ^ "LiteSpeed Web Server Release Log - LiteSpeed Technologies". www.litespeedtech.com. Retrieved 12 February 2022. Enable HTTP/3 v1 by default.
  27. ^ "Release 2.0 beta 17 · caddyserver/caddy". Github. 13 March 2020. Retrieved 11 August 2020.
  28. ^ "Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3". NGINX. 10 June 2020. Retrieved 11 June 2020.
  29. ^ "Experiment with HTTP/3 using NGINX and quiche". The Cloudflare Blog. 17 October 2019. Retrieved 9 November 2019.
  30. ^ Tratcher. "Use ASP.NET Core with HTTP/3 on IIS". docs.microsoft.com. Retrieved 29 April 2022.