從 HTTP/1.1 到 HTTP/3 的演進史
HTTP 是網際網路的基礎協定,每一次版本升級都是為了解決上一個版本的根本限制。 理解這段演進史,才能真正看懂 HTTP/3 做了什麼、解決了什麼、又帶來了什麼新問題。
HTTP/1.1
1997- →每個請求需要一個 TCP 連線(1.0 是),1.1 引入 Keep-Alive 持久連線
- →Pipelining(管線化)理論上可以發多個請求,但實作上幾乎沒瀏覽器啟用
- →瀏覽器並行開 6 個 TCP 連線來加速(Hack,不是設計)
- →Head-of-Line Blocking(HOL Blocking):同一連線的後續請求要等前面的回應完成
- →Header 不壓縮,每個請求都重複傳送大量相同的 Header(User-Agent、Cookie 等)
瓶頸:HTTP 層的 HOL Blocking + 無壓縮 Header
HTTP/2
2015- →多路複用(Multiplexing):一個 TCP 連線可以並行傳輸多個請求/回應(Stream)
- →Header 壓縮(HPACK):重複的 Header 只傳差異,大幅減少傳輸量
- →Server Push:伺服器主動推送資源(已被 Chrome 移除支援)
- →二進位格式(Binary Framing):替代文字格式,解析更高效
- →解決了 HTTP 層的 HOL Blocking,但 TCP 層的 HOL Blocking 依然存在!
瓶頸:TCP 層的 HOL Blocking(丟包時所有 Stream 都要等)
HTTP/3
2022 (RFC 9114)- →基於 UDP + QUIC 協定(告別 TCP,從根本解決 TCP 的限制)
- →真正解決所有層次的 HOL Blocking(每個 Stream 獨立追蹤丟包)
- →0-RTT 連線(第二次連線可以直接傳資料,不需要握手)
- →連線遷移(Connection Migration):切換網路不斷線
- →TLS 1.3 內建(安全性是設計的一部分,不是附加功能)
現況:主流瀏覽器和 CDN 已全面支援,佔全球 HTTP 流量 ~30%
TCP 的致命缺陷 — Head-of-Line Blocking
HTTP/2 的多路複用解決了 HTTP 層的 HOL Blocking,但它依然建立在 TCP 之上。 TCP 保證資料按序到達,這個保證本身就是 HOL Blocking 的根源。 要理解為什麼,需要先理解 TCP 如何處理丟包。
為什麼 QUIC 能做到這一點?因為 QUIC 是在 UDP 之上自己實作了可靠傳輸, 而且每個 Stream 的流量控制和丟包重傳是完全獨立的。 TCP 則是在 OS 核心層實作,無法針對個別應用層的 Stream 做差異化處理。
HOL Blocking 在什麼網路環境最明顯?
丟包率越高,HOL Blocking 的影響越嚴重。4G/5G 行動網路的丟包率約 0.5~2%, WiFi 環境在干擾多時可達 1~3%,長途跨洋線路也有 0.5~1% 的丟包率。 在這些場景下,HTTP/3 對 HTTP/2 的效能優勢最為顯著(可達 30~50%)。 在低延遲、低丟包的同機房環境,差距相對不明顯。
QUIC 協定 — 為什麼要建構在 UDP 上?
選擇 UDP 作為 QUIC 的基礎,不是因為 UDP 更可靠,而是因為 UDP 更「空白」。 UDP 沒有連線概念、沒有流量控制、沒有可靠傳輸,這反而讓 QUIC 可以在應用層自由定義這些行為, 不受 OS 核心 TCP 實作的限制。
連線建立的延遲比較
RTT(Round-Trip Time)是封包從客戶端發出、到伺服器、再回到客戶端的時間。 連線建立所需的 RTT 越少,第一個 byte 到達的延遲就越低。
0-RTT 的安全注意事項
0-RTT 有一個安全限制:它容易受到「重放攻擊」(Replay Attack)。 攻擊者可以截取 0-RTT 的資料並重新發送。因此,0-RTT 只適合「冪等請求」(Idempotent): GET 請求(讀取資料)是安全的,但 POST 付款、POST 下單這類有副作用的請求不應使用 0-RTT。 瀏覽器和 QUIC 實作通常會自動處理這個限制。
連線遷移(Connection Migration)
這是 HTTP/3 最被低估的特性之一。在行動設備普及的今天, 用戶從 WiFi 切換到行動網路是日常操作,但 TCP 連線在這種情況下會直接斷開。 QUIC 用一個優雅的設計完全解決了這個問題。
HTTP/2 + WiFi → 4G
- ×TCP 連線因 IP 改變而斷開
- ×需要重新 TCP + TLS 握手(~200ms RTT × 2)
- ×正在上傳/下載的資料中斷
- ×視訊通話斷線,需要重新撥打
- ×遊戲中斷線,需要重新登入
HTTP/3 + WiFi → 4G
- ✓Connection ID 不變,連線識別不中斷
- ✓短暫停頓(幾十毫秒)後自動恢復
- ✓檔案傳輸無縫繼續
- ✓視訊通話幾乎感覺不到切換
- ✓遊戲角色可能有短暫延遲,但不斷線
連線遷移對行動使用者的影響是真實且可測量的。 在捷運、公車等移動場景中,用戶頻繁切換基地台和 WiFi 熱點, HTTP/3 的連線遷移讓這些切換過程對應用層完全透明,使用者幾乎感覺不到網路的切換。
在實際專案中支援 HTTP/3
啟用 HTTP/3 有幾種難度不同的方式,從一鍵啟用(Cloudflare)到自行編譯 Nginx。 在動手之前,先確認你的網站是否已經支援 HTTP/3,以及如何驗證。
HTTP/3 效能數據與局限性
HTTP/3 在實測中確實帶來了可量化的效能提升,但效益因網路環境不同而差異很大。 這裡提供真實的數據和誠實的局限性分析,幫助你判斷是否值得在你的情境中啟用。
實測效能對比
3G 網路(高延遲、高丟包)
HTTP/3 比 HTTP/2 快 34%
WiFi(低延遲、低丟包)
WiFi 環境差距較小(5~10%)
重複訪問(0-RTT 效果)
0-RTT 使重複訪問延遲幾乎為零
HTTP/3 的局限性(誠實面對)
何時值得啟用 HTTP/3?
值得啟用的場景
- 服務全球用戶或以行動裝置為主的使用者(延遲高)
- 有大量 CSS/JS/圖片資源的前端網站(多路複用效益大)
- 已使用 Cloudflare / Vercel / Netlify(一鍵啟用,零成本)
- SaaS 產品需要優化用戶首次載入體驗
- 遊戲或即時通訊應用(連線遷移特性有價值)
效益有限的場景
- 純後端微服務間的 API 通訊(用 gRPC/HTTP2 更合適)
- 受嚴格企業防火牆管控的 Intranet 系統
- API Gateway 到 Origin Server 的內部通訊(低延遲環境)
- CPU 已是伺服器瓶頸的場景(QUIC 的 User Space 處理消耗更多 CPU)
- 主要用戶在公司辦公室使用有線網路(穩定低丟包)
HTTP/3 的普及現況(2026)
根據 W3Techs 的數據,HTTP/3 已佔全球 HTTP 流量的約 30%。 Google、Facebook、Cloudflare、YouTube 都已大規模部署。 主流瀏覽器(Chrome 87+、Firefox 88+、Safari 14+、Edge 90+)全面支援。 對於新專案,如果你用 Vercel 或 Cloudflare,HTTP/3 是免費自動啟用的, 沒有理由不用。對於自建伺服器,優先考慮 Nginx 1.25+ 或使用 CDN 終止 QUIC。
Tags
上一篇
EP.06 gRPC 與 Protocol Buffers
下一篇
EP.08(Coming Soon)