如果沒有我們的老朋友超文本傳輸??協(xié)議 (HTTP),我們所知道的網(wǎng)絡(luò)就不會(huì)存在。最新的版本 HTTP/3 有望徹底改變我們與網(wǎng)絡(luò)交互的方式。在本文中,我們將深入研究 HTTP/2 和 HTTP/3 之間的差異,研究為什么 TCP 受到 QUIC 的青睞,并探討 HTTP/3 的一些優(yōu)勢(shì)。
什么是 HTTP/3?
在我們深入了解新事物之前,可能需要先了解一些歷史。HTTP 是一種請(qǐng)求-響應(yīng)協(xié)議,這意味著客戶端(通常是 Web 瀏覽器)向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器用請(qǐng)求的信息進(jìn)行響應(yīng)。
HTTP/1.1 是 HTTP 的第一個(gè)標(biāo)準(zhǔn)化版本,發(fā)布于 1997 年。它定義了 Web 通信的基本規(guī)則和標(biāo)準(zhǔn),包括請(qǐng)求-響應(yīng)模型、HTTP 方法(如 GET、POST、PUT 和 DELETE)、和 HTTP 標(biāo)頭。HTTP/1.1 還引入了持久連接和管道的概念,持久連接允許通過單個(gè)連接發(fā)送多個(gè)請(qǐng)求和響應(yīng),管道允許在第一個(gè)請(qǐng)求得到答復(fù)之前發(fā)送第二個(gè)請(qǐng)求。
HTTP/2 于 2015 年發(fā)布,是 HTTP 的重大修訂,引入了多路復(fù)用,允許通過單個(gè)連接同時(shí)發(fā)送多個(gè)請(qǐng)求和響應(yīng),從而減少建立和關(guān)閉連接的開銷。HTTP/2 還引入了標(biāo)頭壓縮,減少了 HTTP 標(biāo)頭的大小并縮短了頁面加載時(shí)間。
HTTP/2 向后兼容 HTTP/1.1,這意味著客戶端和服務(wù)器可以使用任一標(biāo)準(zhǔn)進(jìn)行通信。HTTP/3 的情況并非如此。它不向后兼容 HTTP/2。為了理解其中的原因,我們必須更深入地研究這些協(xié)議。
HTTP 的結(jié)構(gòu)如何

HTTP 可能代表“超文本傳輸??協(xié)議”,但它只是一個(gè)協(xié)議,就像 Voltron 是一個(gè)機(jī)器人一樣。就像五個(gè)獅子機(jī)器人組合在一起組成一個(gè)更大、更強(qiáng)大的機(jī)器人一樣,HTTP 結(jié)合了多種協(xié)議來完成工作。
HTTP 的每個(gè)版本都依賴于協(xié)議的組合,每個(gè)協(xié)議都有不同的職責(zé)。
傳輸層安全協(xié)議
傳輸層安全性 (TLS) 是 HTTP/2 和 HTTP/3 堆棧的一部分,是一種加密協(xié)議,用于通過網(wǎng)絡(luò)提供端到端安全性。應(yīng)該指出的是,TLS 實(shí)際上并不保護(hù)兩端系統(tǒng)上的任何數(shù)據(jù),而是專注于防止數(shù)據(jù)傳輸時(shí)被竊聽或更改。TLS 是安全套接字層 (SSL) 協(xié)議的后繼版本,其最后一個(gè)版本已于 2015 年棄用。等等,這是否意味著我們應(yīng)該將 SSL 證書稱為 TLS 證書?
HTTP/2 使用 TLS 進(jìn)行身份驗(yàn)證、密鑰協(xié)商、會(huì)話恢復(fù)/0-RTT 和加密解密。它仍然完成 HTTP/3 中的大部分工作,但加密/解密除外,這是由 QUIC 處理的。
TCP
傳輸控制協(xié)議 (TCP) 是一種傳輸層協(xié)議,用于確保 IP 網(wǎng)絡(luò)上的可靠通信。它是一種面向連接的協(xié)議,這意味著在發(fā)送數(shù)據(jù)之前,發(fā)送方和接收方之間建立了連接。此連接在整個(gè)通信期間保持不變,并且發(fā)送方和接收方都必須確認(rèn)發(fā)送的數(shù)據(jù)。
TCP 用于確保數(shù)據(jù)以正確的順序可靠地傳送。它使用序列號(hào)來跟蹤發(fā)送的數(shù)據(jù)包,并且可以重新發(fā)送丟失或損壞的數(shù)據(jù)包。TCP還提供流量控制和擁塞控制,這有助于防止網(wǎng)絡(luò)擁塞并確保接收方能夠處理正在發(fā)送的數(shù)據(jù)量。
TCP 是 HTTP/2 的一部分,但不在 HTTP/3 堆棧中。QUIC 處理 TCP 在 HTTP/2 中所做的大部分工作,但端口號(hào)除外。在 HTTP/3 中,這是通過 UDP 完成的。
QUIC
快速 UDP Internet 連接 (QUIC) 是 Google 開發(fā)的傳輸層協(xié)議,旨在取代 TCP 成為用于 Web 流量的主要協(xié)議,其設(shè)計(jì)比 TCP 更高效、更安全。HTTP/3 中的大部分新功能實(shí)際上都?xì)w結(jié)為 QUIC,因?yàn)樗朔薚CP 的限制。
QUIC 使用面向連接的方法,類似于 TCP,但它的設(shè)計(jì)更加輕量級(jí)和高效。它在發(fā)送數(shù)據(jù)之前在客戶端和服務(wù)器之間建立連接,但它不使用與 TCP 相同的握手協(xié)議。相反,QUIC 使用零往返 (0-RTT) 握手,它結(jié)合了傳輸和加密握手。這減少了建立連接的延遲,使 QUIC 比 TCP 更快。
UDP
用戶數(shù)據(jù)報(bào)協(xié)議 (UDP) 是一種傳輸層協(xié)議,用于在網(wǎng)絡(luò)上的設(shè)備之間發(fā)送數(shù)據(jù)報(bào)(數(shù)據(jù)包)。它是一種無連接協(xié)議,這意味著它在發(fā)送數(shù)據(jù)之前并不在發(fā)送方和接收方之間建立連接。相反,發(fā)送方只是將數(shù)據(jù)報(bào)發(fā)送到接收方,而接收方并不確認(rèn)收到數(shù)據(jù)報(bào)。與 QUIC 一樣,UDP 不存在于 HTTP/2 堆棧中。
TCP 的局限性
TCP 有一些限制,使其不太適合現(xiàn)代網(wǎng)絡(luò),特別是對(duì)于需要低延遲的應(yīng)用程序,例如實(shí)時(shí)視頻流或在線游戲。
TCP 需要大量開銷來維護(hù)連接并確保數(shù)據(jù)的可靠傳輸。該開銷包括確認(rèn)消息、丟失數(shù)據(jù)包的重傳以及擁塞控制機(jī)制。這種開銷會(huì)顯著增加延遲并降低連接的整體性能。
TCP 最大的缺點(diǎn)之一是,在某些方面,它仍然像 1999 年一樣。TCP 基本上加載頁面,就好像它們是單個(gè) HTML 文件一樣,可能帶有一些圖像和一些嵌入的 CSS。另一方面,現(xiàn)代頁面可能包含數(shù)百個(gè)文件。
多年來,人們進(jìn)行了大量更新 TCP 的嘗試,但最終發(fā)現(xiàn)修補(bǔ)是不夠的,這導(dǎo)致了 QUIC 的發(fā)展。
TLS 和 QUIC 在 HTTP/3 中如何工作
HTTP/3 仍然使用 TLS,但它的工作方式與 HTTP/2 略有不同,將其部分職責(zé)轉(zhuǎn)移到 QUIC。下面是 HTTP/3 中 TLS 和 QUIC 的不同角色和職責(zé)的快速細(xì)分。
- 加密/解密:TLS 不用于 HTTP/3 中的加密/解密,因?yàn)?QUIC 為通過連接發(fā)送的所有數(shù)據(jù)提供端到端加密。QUIC采用ChaCha20-Poly1305加密算法,比TLS中使用的加密算法更加高效和安全。
- 身份驗(yàn)證:HTTP/3 中使用 TLS 進(jìn)行身份驗(yàn)證,提供一種安全的方式來驗(yàn)證服務(wù)器和客戶端的身份。QUIC 不提供身份驗(yàn)證功能。
- 密鑰協(xié)商:TLS 用于 HTTP/3 中的密鑰協(xié)商,允許客戶端和服務(wù)器就用于加密的共享密鑰達(dá)成一致。
- 會(huì)話恢復(fù)/0-RTT:TLS 用于 HTTP/3 中的會(huì)話恢復(fù)和 0-RTT,允許客戶端和服務(wù)器恢復(fù)先前建立的連接,而無需完全握手。
- 擁塞控制:QUIC負(fù)責(zé)HTTP/3中的擁塞控制,使用自己的擁塞控制算法來管理數(shù)據(jù)流并防止網(wǎng)絡(luò)擁塞。
- 可靠性:QUIC 負(fù)責(zé) HTTP/3 的可靠性,確保數(shù)據(jù)以正確的順序正確傳送。在 HTTP/2 中,這是由 TCP 處理的。
- 連接定向:QUIC 負(fù)責(zé) HTTP/3 中的連接定向,管理連接的建立和拆除。
- 連接遷移:QUIC 負(fù)責(zé) HTTP/3 中的連接遷移。HTTP/2 中不存在此功能。
連接遷移的工作原理
連接遷移是 HTTP/3 中的一項(xiàng)功能,支持網(wǎng)絡(luò)更改而無需發(fā)送另一次握手。每個(gè) QUIC 數(shù)據(jù)包標(biāo)頭都附加有一個(gè)未加密的連接標(biāo)識(shí)符 (CID),因此切換到新網(wǎng)絡(luò)不需要重置連接。這允許連接以 TCP 無法完成的方式更改網(wǎng)絡(luò)和 IP 地址。
例如,在 HTTP/3 下,正在進(jìn)行的下載不會(huì)因網(wǎng)絡(luò)變化而中斷。它只是不斷滾動(dòng),在網(wǎng)絡(luò)可用時(shí)平滑地切換網(wǎng)絡(luò)。
QUIC 使用稱為可鏈接性預(yù)防的功能來確保未加密的 CID 無法通過監(jiān)控各種網(wǎng)絡(luò)上的 CID 來實(shí)際跟蹤某人。連接 ID 列表。所有映射到同一連接的都是隨機(jī)生成的,并在會(huì)話開始時(shí)由客戶端和服務(wù)器商定。每次發(fā)生網(wǎng)絡(luò)更改時(shí),都會(huì)使用列表中的新 CID。這可以防止不同的網(wǎng)絡(luò)鏈接到同一用戶。
QPACK 對(duì)比 HPACK
HPACK 用于 HTTP/2 中,旨在壓縮 HTTP/2 請(qǐng)求和響應(yīng)的標(biāo)頭。它的工作原理是結(jié)合使用霍夫曼編碼和基于字典的壓縮來對(duì)標(biāo)頭進(jìn)行編碼。HPACK 使用經(jīng)常使用的標(biāo)頭字段和值的靜態(tài)字典,它還可以為每個(gè)連接創(chuàng)建動(dòng)態(tài)字典。
HTTP/3 中使用的 QPACK 與 HPACK 類似,它也使用霍夫曼編碼和基于字典的壓縮的組合。然而,QPACK 有一些關(guān)鍵的區(qū)別:
- QPACK 對(duì)所有連接使用單個(gè)共享字典,而 HPACK 對(duì)每個(gè)連接使用單獨(dú)的字典。
- QPACK 通過使用更先進(jìn)的編碼方案(稱為“快速編碼”)來更有效地壓縮標(biāo)頭,該方案可以用單個(gè)字節(jié)對(duì)標(biāo)頭進(jìn)行編碼。
- QPACK還支持更先進(jìn)的壓縮技術(shù),例如頭表本身的壓縮,這可以進(jìn)一步減小壓縮頭的大小。
- QPACK 的設(shè)計(jì)比 HPACK 更高效、更快,因?yàn)樗褂酶咝У木幋a方案,并且壓縮和解壓縮標(biāo)頭所需的計(jì)算更少。
- QPACK 也比 HPACK 更靈活,因?yàn)樗试S對(duì)壓縮設(shè)置進(jìn)行更多自定義,并且可以與不同的傳輸協(xié)議一起使用。
與 HPACK 相比,QPACK 提供更好的壓縮比、更快的壓縮和解壓縮速度以及更大的靈活性。
HTTP/2 與 HTTP/3:性能比較
HTTP/2 和 HTTP/3 都是為了提高 Web 性能而設(shè)計(jì)的,但它們的實(shí)現(xiàn)方式不同。
延遲
由于其零往返 (0-RTT) 握手和更快的連接建立,HTTP/3 的延遲低于 HTTP/2。這意味著 HTTP/3 可以比 HTTP/2 更快地發(fā)送和接收數(shù)據(jù),從而實(shí)現(xiàn)更快的頁面加載時(shí)間。
吞吐量
HTTP/3 具有比 HTTP/2 更高的吞吐量,因?yàn)樗軌蛲ㄟ^單個(gè)連接復(fù)用多個(gè)請(qǐng)求和響應(yīng)。這意味著 HTTP/3 可以同時(shí)發(fā)送和接收多個(gè)請(qǐng)求和響應(yīng),從而提高整體性能。
資源利用
HTTP/3 的設(shè)計(jì)初衷是在資源利用方面比 HTTP/2 更加高效。HTTP/3 使用一種更新且更高效的加密算法,稱為“ChaCha20-Poly1305”,該算法比 HTTP/2 中使用的加密算法更高效。此外,HTTP/3 的多路復(fù)用功能可以更好地利用資源,因?yàn)榭梢酝ㄟ^單個(gè)連接發(fā)送和接收多個(gè)請(qǐng)求和響應(yīng)。
服務(wù)器推送
HTTP/3 支持服務(wù)器推送,這允許服務(wù)器主動(dòng)向客戶端發(fā)送資源,即使客戶端尚未請(qǐng)求它們。這可以加快頁面加載時(shí)間并提高性能。HTTP/2 還支持服務(wù)器推送,但 HTTP/3 的實(shí)現(xiàn)允許客戶端設(shè)置可接受的推送數(shù)量,從而防止浪費(fèi)帶寬。
優(yōu)先級(jí)
與 HTTP/2 相比,HTTP/3 可以更好地確定請(qǐng)求和響應(yīng)的優(yōu)先級(jí)。HTTP/3 的多路復(fù)用功能可以更好地確定請(qǐng)求和響應(yīng)的優(yōu)先級(jí),因?yàn)榭梢允紫劝l(fā)送和接收最重要的請(qǐng)求和響應(yīng)。
總結(jié)
根據(jù) [W3Techs](https://w3techs.com/technologies/details/ce-http3),HTTP/3 的使用率在過去一年中一直在緩慢上升,目前約有 27% 的網(wǎng)站在使用。
TCP 具有 QUIC 所沒有的局限性,包括啟動(dòng)時(shí)間慢、開銷高、可擴(kuò)展性有限以及無法處理大量并發(fā)連接。相比之下,QUIC 的設(shè)計(jì)就是為了解決這些限制。




