HTTP/3

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
International standardHypertext Transfer Protocol Version 3 (HTTP/3) (draft)
Developed byIETF
IntroducedInternet-Draft as of August 2020

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, 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)

Date
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++ Facebook https://github.com/facebook/proxygen#quic-and-http3
Cronet C++ Google 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]

gollark: When you do `if input == "Leon"` you haven't actually read any input.
gollark: You forgot to `read` before the Leon check bit.
gollark: The funny thing is that Dan200 still talks about how great it is on his twitter while ignoring it.
gollark: Are you expecting it to sleep before or after loadImage runs?
gollark: ... Perhaps I should make a Krist API which does not force you into using Jua and all the other random nonsense... hmm...

See also

References

  1. Bishop, M. (2 July 2020). "Hypertext Transfer Protocol Version 3 (HTTP/3)". quicwg.org. Retrieved 1 July 2020.
  2. Bishop, Mike (21 February 2020). Hypertext Transfer Protocol Version 3 (HTTP/3). IETF. I-D draft-ietf-quic-http-27.
  3. "Usage of HTTP/3 for websites". World Wide Web Technology Surveys. W3Techs. Retrieved 8 August 2020.
  4. Cimpanu, Catalin (12 November 2018). "HTTP-over-QUIC to be renamed HTTP/3 | ZDNet". ZDNet. Retrieved 12 November 2018.
  5. Nottingham, Mark (28 October 2018). "Identifying our deliverables". IETF Mail Archive.
  6. "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 19 January 2020.
  7. Daniel, Stenberg. "Daniel Stenberg announces HTTP/3 support in Firefox Nightly". Twitter. Retrieved 5 November 2019.
  8. Cimpanu, Catalin (26 September 2019). "Cloudflare, Google Chrome, and Firefox add HTTP/3 support". ZDNet. Retrieved 27 September 2019.
  9. "Release Notes for Safari Technology Preview 104". 8 April 2020. Retrieved 7 August 2020.
  10. "Apple Developer Documentation". developer.apple.com. Retrieved 23 June 2020.
  11. Inc, Cloudflare. "Microsoft Edge - HTTP/3 Docs". developers.cloudflare.com. Retrieved 2 May 2020.
  12. Internet-Drafts that make up the base QUIC specification: quicwg/base-drafts, IETF QUIC WG, 12 November 2019, retrieved 13 November 2019
  13. "First HTTP/3 with curl". Daniel Stenberg. 5 August 2019. Retrieved 2 October 2019.
  14. "cURL HTTP3 wiki". Daniel Stenberg. 26 September 2019. Retrieved 2 October 2019.
  15. "MsQuic is Open Source". 28 April 2020. Retrieved 28 April 2020.
  16. "LiteSpeed Web Server Release Log". LiteSpeed Web Server Release Log. 17 April 2020. Retrieved 26 June 2020.
  17. "Experiment with HTTP/3 using NGINX and quiche". The Cloudflare Blog. 17 October 2019. Retrieved 9 November 2019.
  18. "Milestone nginx-1.17". trac.nginx.org. Retrieved 9 November 2019.
  19. "Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3". NGINX. 10 June 2020. Retrieved 11 June 2020.
  20. "Release 2.0 beta 17 · caddyserver/caddy". Github. 13 March 2020. Retrieved 11 August 2020.
  21. "ngtcp2/nghttp3". 6 August 2020. Retrieved 7 August 2020 via GitHub.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.