HTTP/1, HTTP/2, HTTP/3 解決了什么問題?
每一代 HTTP 解決了什么問題?下圖說明了主要特征。
圖片
HTTP/1
HTTP 1.0 于 1996 年定型并形成完整文檔。對同一服務(wù)器的每個請求都需要單獨的 TCP 連接。
HTTP 1.1 于 1997 年發(fā)布。TCP 連接可以保持開放以便重復使用(持久連接),但這并不能解決 HOL(Head of Line)阻塞問題。
HOL 阻塞 - 當瀏覽器允許的并行請求數(shù)用完時,后續(xù)請求需要等待前一個請求完成。
HTTP/2
HTTP 2.0 于 2015 年發(fā)布。它通過請求復用解決了 HOL 問題,消除了應(yīng)用層的 HOL 阻塞,但傳輸(TCP)層仍存在 HOL。
如圖所示,HTTP 2.0 引入了 HTTP “流”的概念:這是一種抽象概念,允許在同一 TCP 連接上復用不同的 HTTP 交換。每個流無需按順序發(fā)送。
應(yīng)用場景:
- 大型網(wǎng)站:HTTP/2 的多路復用特性允許多個請求共享一個連接,避免了 HTTP/1.1 中的隊頭阻塞問題。這對于需要加載大量資源的復雜網(wǎng)頁(如圖片、腳本、樣式表等)非常適合。
- CDN:HTTP/2 的頭部壓縮和二進制格式能夠顯著減少數(shù)據(jù)量,提升數(shù)據(jù)傳輸效率。更高效的連接復用讓 CDN 在傳輸大型文件或流媒體內(nèi)容時有更好的性能。
- 移動應(yīng)用:HTTP/2 可以顯著減少移動設(shè)備上的網(wǎng)絡(luò)延遲,適合需要快速響應(yīng)的移動應(yīng)用和 API 請求。
HTTP/3
HTTP 3.0 第一稿于 2020 年發(fā)布。它是 HTTP 2.0 的后續(xù)版本。它使用 QUIC 代替 TCP 作為底層傳輸協(xié)議,從而消除了傳輸層中的 HOL 阻塞。
QUIC 基于 UDP。它將流作為一等公民引入傳輸層。QUIC 流共享同一個 QUIC 連接,因此創(chuàng)建新的 QUIC 流無需額外的握手和慢啟動,但 QUIC 流是獨立傳輸?shù)?,因此在大多?shù)情況下,影響一個流的數(shù)據(jù)包丟失不會影響其他流。
應(yīng)用場景:
- 實時應(yīng)用和游戲:HTTP/3 的快速握手和低延遲特性使其非常適合需要實時數(shù)據(jù)傳輸?shù)膽?yīng)用,比如在線游戲、視頻會議、和實時流媒體。
- 現(xiàn)在 web 應(yīng)用:由于 HTTP/3 提供了更高效的連接管理和更好的用戶體驗,對于現(xiàn)代 Web 應(yīng)用和服務(wù)提供商來說,如使用 SPAs(單頁應(yīng)用)和頻繁的小數(shù)據(jù)請求的場景,HTTP/3 是更優(yōu)的選擇。
- 安全性要求較高的服務(wù):QUIC 協(xié)議自帶加密,簡化了 TLS 的握手過程,因此對于那些需要快速、安全連接建立的服務(wù),HTTP/3 是很合適的。