HTTP/3

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，并且在排名前1000万的网站中，有34%的网站支持HTTP/3。

 历史

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中开始默认启用。{{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-

QUIC（快速UDP网络连接）是一种实验性的网络传输协议，由Google开发，该协议旨在使网页传输更快。在2018年10月28日的邮件列表讨论中，互联网工程任务组（IETF） HTTP和QUIC工作组主席提出了将HTTP-over-QUIC更名为HTTP/3的正式请求，以“明确地将其标识为HTTP语义的另一个绑定……使人们理解它与QUIC的不同”，并在最终确定并发布草案后，将QUIC工作组继承到HTTP工作组。<ref>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资源记录。

 实现 

 客户端 
+HTTP/3 浏览器支持浏览器实现但默认禁用的起始版本默认开启的起始版本备注Chrome稳定版 (79)2019年12月872020年4月早期版本实现了QUIC的其他草案Edge稳定版 (79)2019年12月872020年4月Edge 79是基于Chromium的首个版本Firefox稳定版 (72.0.1)2020年1月882021年4月Safari稳定版 (14.0)2020年9月16.42023年3月Apple从Safari 16.4开始，对部分Safari用户测试HTTP/3的支持。

 库 
为 QUIC and HTTP/3 实现了客户端或服务器逻辑的开源库有
+实现HTTP/3的库名称客户端服务端编程语言所属公司仓库链接lsquicCLiteSpeedhttps://github.com/litespeedtech/lsquic nghttp3Chttps://github.com/ngtcp2/nghttp3 Chttps://github.com/h2o/h2o cURLChttps://github.com/curl/curl MsQuicCMicrosofthttps://github.com/microsoft/msquic proxygenC++Facebookhttps://github.com/facebook/proxygen#quic-and-http3 CronetC++Googlehttps://github.com/chromium/chromium/tree/main/net/quic .NETC# (using MsQuic)Microsofthttps://github.com/dotnet quic-goGohttps://github.com/quic-go/quic-go http3Haskellhttps://github.com/kazu-yamamoto/http3 KwikJavahttps://github.com/ptrd/kwik FlupkeJavahttps://bitbucket.org/pjtr/flupke aioquicPythonhttps://github.com/aiortc/aioquic quicheRustCloudflarehttps://github.com/cloudflare/quiche neqoRustMozillahttps://github.com/mozilla/neqo quinnRusthttps://github.com/quinn-rs/quinn s2n-quicRustAmazon Web Serviceshttps://github.com/aws/s2n-quic 

 服务器 

 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。

 参考资料 

 外部链接 


Category:应用层协议
Category:HTTP