天天看點

HTTP 2還沒上手,HTTP 3已經箭在弦上

作者:行思錄

去年的這個時候,國内的 web 網絡環境開始普及和部署 HTTP/2. 時隔一年,HTTP/2 的普及程度有了顯著提升,而各大CDN廠商普及的廣度和速度一直走在行業前列。甚至有不少CDN廠商在直播以及部分HTTP場景還引入了 QUIC.

在拙文《當我們在談論HTTP隊頭阻塞時,我們在談論什麼?》中,我們提到,HTTP/2 over QUIC 是目前唯一應用落地解決了傳輸層隊頭阻塞問題的HTTP實作。那個時候,無論是 HTTP/2 over TCP 還是 HTTP/2 over QUIC(UDP) 都被我們認為是 HTTP/2,隻是傳輸層使用的協定不一樣。這種略帶暧昧的模糊叫法在2018年11月成為了曆史:

在2018年10月28日的郵件清單讨論中,網際網路工程任務組(IETF) HTTP和QUIC工作組主席Mark Nottingham提出了将HTTP-over-QUIC更名為HTTP/3的正式請求,以“明确地将其辨別為HTTP語義的另一個綁定……使人們了解它與QUIC的不同”,并在最終确定并釋出草案後,将QUIC工作組繼承到HTTP工作組。在随後的幾天讨論中,Mark Nottingham的提議得到了IETF成員的接受,他們在2018年11月給出了官方準許,認可HTTP-over-QUIC成為HTTP/3。

雖然看起來像是之前的 HTTP/2 over QUIC 換了一個名稱(從我個人角度了解,取名為 HTTP/2.1也許更合适),但是其背後卻展現了 IETF 對 HTTP 未來标準的态度和方向,也許幾年以後來看這次名稱的确立會更加明白其重要意義。

HTTP/3 與 HTTP/2 over QUIC 的差別

QUIC 将成為一個通用安全傳輸層協定

目前階段,Google 實作的 QUIC 與 IETF 實作的 QUIC 是不相容的。Google 版 QUIC 隻能用于 HTTP/2,且在協定層面與 HTTP/2 有一些強綁定。如 QUIC 幀映射 HTTP/2 frame. 這就導緻很多大廠都沒有跟進 QUIC,使得 HTTP/2 over QUIC 基本隻能在 Google 自家的 Chrome, Gmail 等軟體中普及使用,一度給行業造成“隻有Google在弄”的錯覺。

納入 IETF 以後,顯然 Google 就不能這麼玩了。QUIC 定位為一個通用安全傳輸層協定:

HTTP 2還沒上手,HTTP 3已經箭在弦上

可以近似的認為 QUIC over UDP 将成為下一代(或替代)TLS over TCP. 也就是說, QUIC 将能應用于任何應用層協定中,隻是目前階段将優先在 HTTP 中進行應用和驗證。

統一使用 TLS 1.3 作為安全協定

2018年,有幾個重要的WEB标準終于塵埃落定,其中一個便是 RFC 8446 TLS 1.3. 這個标準對于降低延遲,改善使用者體驗,尤其是移動端的體驗有非常重要的意義。在拙文《TLS1.3/QUIC 是怎樣做到 0-RTT 的》中,我們提到 雖然 TLS 1.3和 QUIC 都能做到 0-RTT,進而降低延遲,但是 QUIC 卻自顧自地實作了一套安全協定。主要是因為當時 TLS 1.3 标準還沒有釋出,而 QUIC 又需要一套安全協定:

The QUIC crypto protocol is the part of QUIC that provides transport security to a connection. The QUIC crypto protocol is destined to die. It will be replaced by TLS 1.3 in the future, but QUIC needed a crypto protocol before TLS 1.3 was even started.

如今,TLS 1.3 标準已經釋出,而 HTTP/3 也納入 IETF,是以 QUIC 也就順理成章的使用 TLS 1.3 作為其安全協定。Google 在這些方面倒是從來都不雞賊和墨迹,點贊。

使用 QHPACK 頭部壓縮代替 HPACK

其實,QPACK與HPACK的設計非常類似,單獨提出QPACK主要是更好的适配QUIC,同時也是 Google 将 QUIC 從與 HTTP/2 的耦合中抽離出來,與 IETF 标準完成統一的必要一步。

HTTP/3 問題與挑戰

UDP 連通性問題

幾乎所有的電信營運商都會“歧視” UDP 資料包,原因也很容易了解,畢竟曆史上幾次臭名昭著的 DDoS 攻擊都是基于 UDP 的。國内某城寬帶在某些區域更是直接禁止了非53端口的UDP資料包,而其他營運商及IDC即使沒有封禁UDP,也是對UDP進行嚴格限流的。這點上不太樂觀,但是我們相信随着标準的普及和推廣落地,營運商會逐漸改變對UDP流量的歧視政策。國外的情況會稍好一些,根據Google的資料,他們部署的QUIC降級的比例不到10%。

QUIC 不支援明文傳輸

對于使用者來說,這是一個優勢,并不是問題。對于國内内容審查環境來說是個不可忽視的坎。但QUIC以後畢竟也是基于TLS協定的,國内HTTPS都能普及下來,QUIC的普及也許會更樂觀一些。

UDP 消耗資源多

進一步了解 HTTP/3