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.