HTTP/3是HTTP协议的第三个主要版本,用于在万维网上交换信息。与之前版本(HTTP/1.1、HTTP/2等)不同,HTTP/3不依赖TCP协议,转为使用基于UDP协议的多路复用传输协议QUIC协议实现。
此变化主要为了解决HTTP/2中存在的队头阻塞问题。由于HTTP/2在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。
与该协议的早期版本相比,HTTP/3使用相似的语义,包括相同的请求方法、状态代码和消息字段,但编码方式和会话状态的维护方式有所不同。然而,部分由于该协议采用了QUIC,与之前的版本相比,HTTP/3在实际使用中具有更低的延迟和更快的加载速度:在某些情况下,速度是HTTP/1.1(是许多网站唯一部署的HTTP版本)的四倍以上。
截至2024年9月,超过95%的主流网络浏览器支持HTTP/3
历史
file:HTTP-1.1 vs. HTTP-2 vs. HTTP-3 Protocol Stack.svg|frame|HTTP/3与HTTP/1.1、HTTP/2之协议栈比较
rect 0 44 85 94 HTTP/1.1
rect 0 95 85 137 传输层安全性协议
rect 0 138 85 189 传输控制协议
rect 126 44 210 94 HTTP/2
rect 126 95 210 137 TLS 1.2
rect 126 138 210 189 传输控制协议
rect 251 44 336 74 HTTP/3
rect 255 90 328 121 TLS 1.3
rect 251 125 336 158 QUIC
rect 251 159 336 189 用户数据报协议
rect 0 189 336 231 网际协议
HTTP/3起源于QUIC工作组采纳的。最初的提案名为“HTTP/2 Semantics Using The QUIC Transport Protocol”(使用QUIC传输协议的HTTP/2语义),后来更名为“Hypertext Transfer Protocol (HTTP) over QUIC”。
在2018年10月28日的一次邮件列表讨论中,IETF HTTP和QUIC工作组主席Mark Nottingham提议将HTTP-over-QUIC更名为HTTP/3,以“清晰地表明它是HTTP语义到线路协议的另一种绑定方式……让人们意识到其与QUIC的分离”。Nottingham的提议在几天后被其他IETF成员接受。HTTP工作组受命在HTTP/3的设计期间协助QUIC工作组,然后在发布后承担维护责任。
Chrome(Canary build)在2019年9月添加了对HTTP/3的支持,然后最终在稳定版本中实现,但默认情况下通过功能标志禁用。它在2020年4月默认启用。Firefox在2019年11月通过功能标志添加了对HTTP/3的支持,并于2021年4月在Firefox 88中开始默认启用。2020年4月8日在Safari Technology Preview中添加了对HTTP/3的实验性支持,并包含在随iOS 14和macOS 11一起发布的Safari 14中,但截至macOS和iOS上的Safari 16,它仍然默认禁用。
2022年6月6日,IETF在中将HTTP/3发布为提议标准。
相较于HTTP/1.1与HTTP/2
不同HTTP版本之间的语义保持一致,如请求方法、状态代码和消息字段等通常在所有版本中都适用。差异在于这些语义到底层传输的映射。HTTP/1.1和HTTP/2都使用TCP作为其传输协议。HTTP/3采用QUIC,一种传输层网络协议,基于用户数据报协议(UDP)实现了用户空间拥塞控制。QUIC的引入旨在解决HTTP/2中被称为 “队头阻塞” 的主要问题:由于HTTP/2多路复用的并行性对TCP的丢失恢复机制是不可见的,因此一旦发生数据包丢失或重排序,所有活跃的事务都会停滞,无论该事务是否受到丢失数据包的影响。相较之下,QUIC提供了原生多路复用,因此丢包只会影响数据真正丢失的那些流。
提议的DNS资源记录SVCB(由服务绑定)和HTTPS将允许在不首先通过先前的HTTP版本接收Alt-Svc标头的情况下进行连接,从而消除TCP握手的1个RTT。自Firefox 92、iOS 14、报告的Safari 14支持以来,以及Chromium在标志后支持HTTPS资源记录。
实现
客户端
库
为 QUIC and HTTP/3 实现了客户端或服务器逻辑的开源库有
服务器
- 2021年6月7日,LiteSpeed Web Server(及OpenLiteSpeed)6.0.2版本发布,并成为默认启用HTTP/3的首个版本。
- Caddy网页服务器v2.6.0(2022年9月20日发布)默认启用了HTTP/3。
- Nginx自1.25.0版本(2023年5月23日发布)开始支持HTTP/3。2020年6月,发布了支持HTTP/3的nginx技术预览版。 2023年2月,发布了支持HTTP/3的nginx二进制包。
- Cloudflare在2019年发布了一个补丁,该补丁将quiche HTTP/3库集成到nginx中。
- Microsoft IIS在Windows Server 2022/Windows 11上原生支持HTTP/3。
- HAProxy自2.6版本(2022年5月31日发布)起支持HTTP/3 over QUIC。
- 中基于HTTP的协议自4.1.8-1开始支持HTTP/3。
参考资料
外部链接
*
评论 (0)