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中開始默認啟用。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資源記錄。

## 實現

### 客戶端

瀏覽器｜實現但默認禁用的起始版本｜默認開啟的起始版本｜備註

Chrome｜穩定版 (79)｜2019年12月｜87｜2020年4月｜早期版本實現了QUIC的其他草案

Edge｜穩定版 (79)｜2019年12月｜87｜2020年4月｜Edge 79是基於Chromium的首個版本

Firefox｜穩定版 (72.0.1)｜2020年1月｜88｜2021年4月

Safari｜穩定版 (14.0)｜2020年9月｜16.4｜2023年3月｜Apple從Safari 16.4開始，對部分Safari使用者測試HTTP/3的支持。

### 庫

為 QUIC and HTTP/3 實現了客戶端或伺服器邏輯的開源庫有

名稱｜客戶端｜服務端｜程式語言｜所屬公司｜倉庫連結

lsquic｜支持｜支持｜C｜LiteSpeed｜https://github.com/litespeedtech/lsquic

nghttp3｜支持｜支持｜C｜https://github.com/ngtcp2/nghttp3

H2O (網路伺服器)｜不支持｜支持｜C｜https://github.com/h2o/h2o

cURL｜支持｜不支持｜C｜https://github.com/curl/curl

MsQuic｜支持｜支持｜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｜支持｜支持｜C# (using MsQuic)｜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的首個版本。
- 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。
- Nimble Streamer中基於HTTP的協議自4.1.8-1開始支持HTTP/3。