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