User:Llxray/HTTP/3
國際標準 | Bishop, Mike. Hypertext Transfer Protocol Version 3 (HTTP/3). quicwg.org. [2021-10-28] (英语). (draft) |
---|---|
開發單位 | IETF |
規範發布 | Internet Draft 截至2022年2月[update] |
HTTP/3是用于在万维网上交换信息的超文本传输协议即将到来的第三个主要版本,与HTTP/1.1和HTTP/2并列。 HTTP/3 以QUIC为传输层控制协议,它被发布为RFC 9000 。 [1] [2]
HTTP/3 使用与前版本相同的语义,包括相同的请求方法、状态代码和头字段,但对它们使用了不同的编码和维护会话状态的方式。
截至2022年2月,HTTP/3协议仍然是一个互联网草案,但其已经被73%的运行中的网络浏览器所支持。[3]根据W3Techs的数据,排名前1000万个网站中有24%的网站支持HTTP/3。[4]自2020年4月起,Google Chrome(包括基于它的Microsoft Edge,以及安卓版的Chrome)[5]已经支持它。自2021年5月起,Mozilla Firefox也支持它。[3][6](macOS Big Sur和iOS 14上的)Safari 14也实施了该协议,但默认是被禁用的。[7]
历史
[编辑]HTTP/3 是 QUIC 工作组通过的互联网草案。它最初的提案被命名为“使用QUIC传输协议的HTTP/2语义”。[8] 后来又被命名为“基于 QUIC 的超文本传输协议 (HTTP)”。 [9]
2018年10月28日,在一次邮件列表讨论中,IETF HTTP和QUIC工作组主席Mark Nottingham提议将HTTP-over-QUIC重命名为HTTP/3,以 "清楚地识别它是HTTP语义与传输层协议的另一种结合......让人们理解它与QUIC本身的分离"。[10]诺丁汉的提议在几天后被IETF成员接受。HTTP工作组被授权在HTTP/3的设计过程中协助QUIC工作组,并在发布后承担维护责任。[11]
对 HTTP/3 的支持于 2019 年 9 月添加到Chrome (Canary版)中,然后被应用到稳定版中。但它被默认禁用,并于 2020 年 4 月起被默认启用。 [12] Firefox 在 2019 年 11 月[3][13][14]添加了对 HTTP/3 的支持,并于 2021 年 4 月在 Firefox 88 中默认启用它。[3][6]对 HTTP/3 的实验性支持已于 2020 年 4 月 8 日[15]添加到 Safari 技术预览版中,并包含在iOS 14和macOS 11 [16]附带的 Safari 14 中,但默认情况下仍处于禁用状态。 [7]
与 HTTP/1.1 和 HTTP/2 的比较
[编辑]HTTP的语义在不同的版本中是一致的:相同的请求方式、状态代码和消息头通常适用于所有的版本。差异在于这些语义与底层传输的映射。HTTP/1.1和HTTP/2都使用TCP作为其传输层控制协议。HTTP/3使用QUIC,这是一个传输层控制协议,在用户数据报协议(UDP)上使用用户空间拥堵控制。转换到QUIC的目的是解决HTTP/2的一个主要问题,即 "队头阻塞":因为HTTP/2的多路复用的并行性质TCP的丢包重传是不可见的,一个丢失或重新排序的数据包就会导致所有进行的传输停滞,无论该传输是否受到丢包的影响。由于QUIC原生提供多路复用,丢失的数据包只影响数据丢失的流。
实现
[编辑]客户端
[编辑]浏览器
[编辑]浏览器 | 开始实现的版本(默认禁用) | 默认启用的版本 | 注 | ||
---|---|---|---|---|---|
Chrome | 稳定版(79) | 2019 年 12 月 | 87 [17] | 2020 年 4 月[18] | 早期版本实现了 QUIC 的其他草案(gQUIC) |
Firefox | 稳定版 (72.0.1) | 2020 年 1 月 | 88 [6] | 2021 年 4 月[19] | |
Safari | 技术预览版104 | 2020 年 4 月 | |||
Edge | 87 | 2020 年 4 月 |
源码库
[编辑]为 QUIC 和 HTTP/3 实现客户端或服务器逻辑的开源库包括[20]
名称 | 客户端 | 服务端 | 语言 | 开发公司 | 库地址 |
---|---|---|---|---|---|
lsquic | 是 | 是 | C | Litespeed | https://github.com/litespeedtech/lsquic |
nghttp3 | 是 | 是 | C | https://github.com/ngtcp2/nghttp3 | |
h2o | 否 | 是 | C | https://github.com/h2o/h2o | |
libcurl[21][22] | 是 | 否 | C | https://github.com/curl/curl | |
MsQuic[23] | 是 | 是 | C | Microsoft | https://github.com/microsoft/msquic |
proxygen | 是 | 是 | C++ | https://github.com/facebook/proxygen#quic-and-http3 | |
Cronet | 是 | 是 | C++ | https://github.com/chromium/chromium/tree/main/net/quic | |
.NET[24] | 是 | 是 | C# (using MsQuic)[25] | Microsoft | https://github.com/dotnet |
quic-go | 是 | 是 | Go | https://github.com/lucas-clemente/quic-go | |
http3 | 是 | 是 | Haskell | https://github.com/kazu-yamamoto/http3 | |
Kwik | 是 | 是 | Java | https://github.com/ptrd/kwik | |
Flupke | 是 | 否 | Java | https://bitbucket.org/pjtr/flupke | |
aioquic | 是 | 是 | Python | https://github.com/aiortc/aioquic | |
quiche | 是 | 是 | Rust | Cloudflare | https://github.com/cloudflare/quiche |
neqo | 是 | 是 | Rust | Mozilla | https://github.com/mozilla/neqo |
quinn | 是 | 是 | Rust | https://github.com/quinn-rs/quinn |
服务器
[编辑]- LiteSpeed Web 服务器(和 OpenLiteSpeed)支持 HTTP/3 草案 32。 [26]
- 从 2.0 beta 17 开始, Caddy Web 服务器对 HTTP/3 具有实验性支持。 [27]
- Nginx对 HTTP/3 的支持正在开发中。 2020 年 6 月发布了支持 HTTP/3 的 nginx 技术预览。 [28]
- Cloudflare 为 nginx 分发了一个补丁,该补丁将 quiche HTTP/3 库集成到其中。 [29]
也可以看看
[编辑]参考
[编辑]- ^ Cloudflare HTTP/3.
- ^ QUIC: A UDP-Based Multiplexed and Secure Transport. May 2021.
- ^ 3.0 3.1 3.2 3.3 Can I use... Support tables for HTML5, CSS3, etc. caniuse.com. [2021-12-03].
- ^ Usage of HTTP/3 for websites. World Wide Web Technology Surveys. W3Techs. [3 December 2021].
- ^ Enabling QUIC in tip-of-tree. groups.google.com. [2021-04-08].
- ^ 6.0 6.1 6.2 Damjanovic, Dragana. QUIC and HTTP/3 Support now in Firefox Nightly and Beta. Mozilla Hacks – the Web developer blog. 16 April 2021 [2021-04-17] (美国英语).
- ^ 7.0 7.1 Safari 14 Release Notes. developer.apple.com. [4 December 2020].
- ^ HTTP/2 Semantics Using The QUIC Transport Protocol. 8 July 2016.
- ^ Cimpanu, Catalin. HTTP-over-QUIC to be renamed HTTP/3 | ZDNet. ZDNet. 12 November 2018 [12 November 2018] (英语).
- ^ Nottingham, Mark. Identifying our deliverables. IETF Mail Archive. 28 October 2018.
- ^ Hypertext Transfer Protocol Charter. ietf.org. [2020-09-02].
- ^ Enabling QUIC in tip-of-tree. groups.google.com. [2021-04-08].
- ^ Daniel, Stenberg. Daniel Stenberg announces HTTP/3 support in Firefox Nightly. Twitter. [5 November 2019].
- ^ Cimpanu, Catalin. Cloudflare, Google Chrome, and Firefox add HTTP/3 support. ZDNet. 26 Sep 2019 [27 Sep 2019].
- ^ Release Notes for Safari Technology Preview 104. webkit.org. 8 April 2020 [7 August 2020].
- ^ Safari 14 Release Notes. developer.apple.com. [4 December 2020].
- ^ Can I use... Support tables for HTML5, CSS3, etc. caniuse.com. [2021-04-09].
- ^ Enabling QUIC in tip-of-tree. groups.google.com. [2021-04-09].
- ^ Firefox Release Owners - MozillaWiki. wiki.mozilla.org. [2021-04-09].
- ^ QUIC Implementations. GitHub. [2021-04-08] (英语).
- ^ First HTTP/3 with curl. Daniel Stenberg. August 5, 2019 [October 2, 2019].
- ^ cURL HTTP3 wiki. Daniel Stenberg. September 26, 2019 [October 2, 2019].
- ^ MsQuic is Open Source. April 28, 2020 [April 28, 2020].
- ^ HTTP/3 support in .NET 6. September 17, 2021 [September 17, 2021].
- ^ HTTP/3 support in .NET 6. .NET Blog. 2021-09-17 [2022-01-12] (美国英语).
- ^ LiteSpeed Web Server Release Log. LiteSpeed Web Server Release Log. 2020-04-17 [2020-06-26] (英语).
- ^ Release 2.0 beta 17 · caddyserver/caddy. Github. 2020-03-13 [2020-08-11] (美国英语).
- ^ Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3. NGINX. 2020-06-10 [2020-06-11] (美国英语).
- ^ Experiment with HTTP/3 using NGINX and quiche. The Cloudflare Blog. 2019-10-17 [2019-11-09] (英语).