HTTP/3

来自维基百科,自由的百科全书

HTTP/3

HTTP/3HTTP协议的第三个主要版本,用于在万维网上交换信息。与之前版本(HTTP/1.1HTTP/2)不同,HTTP/3不依赖TCP协议,转为使用基于UDP协议的多路复用传输协议QUIC协议实现。[1]

此变化主要为了解决HTTP/2中存在的队头阻塞问题。由于HTTP/2在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。

与该协议的早期版本相比,HTTP/3使用相似的语义,包括相同的请求方法状态代码消息字段,但编码方式和会话状态的维护方式有所不同。然而,部分由于该协议采用了QUIC,与之前的版本相比,HTTP/3在实际使用中具有更低的延迟和更快的加载速度:在某些情况下,速度是HTTP/1.1(是许多网站唯一部署的HTTP版本)的四倍以上。[2][3]

截至2024年9月,超过95%的主流网络浏览器支持HTTP/3[4],并且在排名前1000万的网站中,有34%的网站支持HTTP/3。[5]

历史

ThumbHTTP/1.1传输层安全性协议传输控制协议HTTP/2TLS 1.2传输控制协议HTTP/3TLS 1.3QUIC用户数据报协议网际协议
Protocol stack of HTTP/3 compared to HTTP/1.1 and HTTP/2

HTTP/3起源于QUIC工作组采纳的互联网草案英语Internet_Draft。最初的提案名为“HTTP/2 Semantics Using The QUIC Transport Protocol”[6](使用QUIC传输协议的HTTP/2语义),后来更名为“Hypertext Transfer Protocol (HTTP) over QUIC”[7]

在2018年10月28日的一次邮件列表讨论中,IETF HTTP和QUIC工作组主席Mark Nottingham提议将HTTP-over-QUIC更名为HTTP/3,以“清晰地表明它是HTTP语义到线路协议的另一种绑定方式……让人们意识到其与QUIC的分离”。[8]Nottingham的提议在几天后被其他IETF成员接受。[9]HTTP工作组受命在HTTP/3的设计期间协助QUIC工作组,然后在发布后承担维护责任。[10]

Chrome(Canary build)在2019年9月添加了对HTTP/3的支持,然后最终在稳定版本中实现,但默认情况下通过功能标志禁用。它在2020年4月默认启用。[11]Firefox在2019年11月通过功能标志添加了对HTTP/3的支持[4][12][13],并于2021年4月在Firefox 88中开始默认启用。[4][14]2020年4月8日在Safari Technology Preview中添加了对HTTP/3的实验性支持[15],并包含在随iOS 14macOS 11一起发布的Safari 14中[16][17],但截至macOS和iOS上的Safari 16,它仍然默认禁用。[来源请求]

2022年6月6日,IETFRFC 9114中将HTTP/3发布为提议标准

相较于HTTP/1.1与HTTP/2

不同HTTP版本之间的语义保持一致,如请求方法状态代码消息字段等通常在所有版本中都适用。差异在于这些语义到底层传输的映射。HTTP/1.1HTTP/2都使用TCP作为其传输协议。HTTP/3采用QUIC,一种传输层网络协议,基于用户数据报协议(UDP)实现了用户空间拥塞控制。QUIC的引入旨在解决HTTP/2中被称为 “队头阻塞” 的主要问题:由于HTTP/2多路复用的并行性对TCP的丢失恢复机制是不可见的,因此一旦发生数据包丢失或重排序,所有活跃的事务都会停滞,无论该事务是否受到丢失数据包的影响。相较之下,QUIC提供了原生多路复用,因此丢包只会影响数据真正丢失的那些流。

提议的DNS资源记录SVCB(由服务绑定)和HTTPS将允许在不首先通过先前的HTTP版本接收Alt-Svc标头的情况下进行连接,从而消除TCP握手的1个RTT。[18][19]自Firefox 92、iOS 14、报告的Safari 14支持以来,以及Chromium在标志后支持HTTPS资源记录。[20][21][22]

实现

客户端

更多信息 浏览器, 实现但默认禁用的起始版本 ...
HTTP/3 浏览器支持
浏览器 实现但默认禁用的起始版本 默认开启的起始版本 备注
Chrome 稳定版 (79) 2019年12月 87[23] 2020年4月[24] 早期版本实现了QUIC的其他草案
Edge 稳定版 (79) 2019年12月 87 2020年4月 Edge 79是基于Chromium的首个版本
Firefox 稳定版 (72.0.1) 2020年1月 88[25] 2021年4月[26]
Safari 稳定版 (14.0) 2020年9月 16.4 2023年3月 Apple从Safari 16.4开始,对部分Safari用户测试HTTP/3的支持。[27]
关闭

为 QUIC and HTTP/3 实现了客户端或服务器逻辑的开源库有[28]

更多信息 名称, 客户端 ...
实现HTTP/3的库
名称 客户端 服务端 编程语言 所属公司 仓库链接
lsquic 支持 支持 C LiteSpeed https://github.com/litespeedtech/lsquic页面存档备份,存于互联网档案馆
nghttp3 支持 支持 C https://github.com/ngtcp2/nghttp3页面存档备份,存于互联网档案馆
H2O英语H2O (web server) 不支持 支持 C https://github.com/h2o/h2o页面存档备份,存于互联网档案馆
cURL[29][30] 支持 不支持 C https://github.com/curl/curl页面存档备份,存于互联网档案馆
MsQuic[31] 支持 支持 C Microsoft https://github.com/microsoft/msquic页面存档备份,存于互联网档案馆
proxygen 支持 支持 C++ Facebook https://github.com/facebook/proxygen#quic-and-http3页面存档备份,存于互联网档案馆
Cronet 支持 支持 C++ Google https://github.com/chromium/chromium/tree/main/net/quic页面存档备份,存于互联网档案馆
.NET[32] 支持 支持 C# (using MsQuic)[33] Microsoft https://github.com/dotnet页面存档备份,存于互联网档案馆
quic-go 支持 支持 Go https://github.com/quic-go/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页面存档备份,存于互联网档案馆
s2n-quic 支持 支持 Rust Amazon Web Services https://github.com/aws/s2n-quic页面存档备份,存于互联网档案馆
关闭

服务器

  • 2021年6月7日,LiteSpeed Web Server(及OpenLiteSpeed)6.0.2版本发布,并成为默认启用HTTP/3的首个版本。[34]
  • Caddy网页服务器v2.6.0(2022年9月20日发布)默认启用了HTTP/3。[35]
  • Nginx自1.25.0版本(2023年5月23日发布)开始支持HTTP/3。2020年6月,发布了支持HTTP/3的nginx技术预览版。[36] 2023年2月,发布了支持HTTP/3的nginx二进制包。[37]
  • Cloudflare在2019年发布了一个补丁,该补丁将quiche HTTP/3库集成到nginx中。[38]
  • Microsoft IIS在Windows Server 2022/Windows 11上原生支持HTTP/3。[39]
  • HAProxy自2.6版本(2022年5月31日发布)起支持HTTP/3 over QUIC。[40][41]
  • Nimble Streamer英语Nimble Streamer中基于HTTP的协议自4.1.8-1[42]开始支持HTTP/3。

参考资料

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.