HTTP/3 來了,你瞭解它麼?

又拍雲發表於2020-08-27

作為我們網上衝浪最為常見,也經常被人忽視的 HTTP 已經更新換代到了 HTTP/3。本文簡單明瞭的帶你認識 HTTP/3 的作用。

最近二狗子看到自己儲存女神婷婷照片所用的雲服務商——又拍雲推出了 HTTP/3 嚐鮮功能。作為愛好學習的二狗子同學既驚喜又好奇,他對 HTTPS、HTTP/2 非常熟悉,但是對於 HTTP/3 卻是少了一些瞭解。

“HTTP/2 都還沒普及,沒想到又拍雲竟然連 HTTP/3 功能都上了,真不愧是業界良心,果然他們常說的技術氛圍不只是說說的。看樣子這段時間自己不夠勤快,是時候去學習下 HTTP/3 相關知識了。”二狗子一邊心裡想著,一邊就開始找資料學習了。

HTTP/3 是什麼?

要深入瞭解 HTTP/3,那首先要知道什麼是 HTTP/3。

如上圖所示,HTTP/3 是基於 QUIC 的協議。而 QUIC 協議是 Google 提出的一套開源協議,它基於 UDP 來實現,直接競爭對手是 TCP 協議。

另外,要聊 HTTP/3,HTTP 的發展歷程是怎麼也繞不過去的,而且可以講很久。

如果想要詳細瞭解 HTTP 的前世今生與發展歷程,可以檢視之前的內容《當我談 HTTP 時,我談些什麼

HTTP/3 的優點及不足

今天我們在這裡簡單說一下 HTTP/3 相比較 HTTP/2 進步的那些點。

迴歸正題,相比 HTTP/2 而言 HTTP/3 有以下幾點提升:

  • HTTP/3 使用 stream 進一步擴充套件了 HTTP/2 的多路複用。在 HTTP/3 模式下,一般傳輸多少個檔案就會產生對應數量的 stream。當這些檔案中的其中一個發生丟包時,你只需要重傳丟包檔案的對應 stream 即可。

  • HTTP/3 不再是基於 TCP 建立的,而是通過 UDP 建立,在使用者空間保證傳輸的可靠性,相比 TCP,UDP 之上的 QUIC 協議提高了連線建立的速度,降低了延遲。

  • 通過引入 Connection ID,使得 HTTP/3 支援連線遷移以及 NAT 的重繫結。

  • HTTP/3 含有一個包括驗證、加密、資料及負載的 built-in 的 TLS 安全機制。

  • 擁塞控制。TCP 是在核心區實現的,而 HTTP/3 將擁塞控制移出了核心,通過使用者空間來實現。這樣做的好處就是不再需要等待核心更新可以實現很方便的進行快速迭代。

  • 頭部壓縮。HTTP/2 使用的 HPACK,HTTP/3 更換成了相容 HPACK 的 QPACK 壓縮方案。QPACK 優化了對亂序傳送的支援,也優化了壓縮率。

沒有哪項技術是完美無缺的,更不用說是還在發展中的 HTTP/3 了。

HTTP/3 建立傳輸用的是 UDP 協議,而在 HTTP/3 出現前 UDP 的通常出現地點是類似《計算機網路》這樣的書面理論,即便是實際應用也大多和網路攻擊一起出現,這就導致 UDP 的名聲不太好。名聲差了自然在硬體上的支援也捉襟見肘,大部分網際網路服務也就理所當然的對 UDP 的訪問進行限制。

準備好迎接 HTTP/3 了嗎?

但是毫無疑問的,HTTP/3 是目前最前沿的網際網路標準,它的缺點可以通過不斷的改進來完善。相比與 HTTP/3 本身的缺陷問題,作為一項新技術最致命的問題是能否獲得足夠多的有效支援,從而進行大範圍推廣。

那麼當前的環境已經有迎接 HTTP/3 的能力了麼?

HTTP/3 作為網際網路的標準革新之一,在支援方面無非兩點,一個是服務端,一個是客戶端。

先來看一下客戶端,大家所熟悉的瀏覽器 Chrome 以及常用 Curl 命令列工具都已經支援 HTTP/3 特性。在 Chrome 的開發者工具一欄裡你可以看到一項顯示為“HTTP/2+quic/99”,這就是 Chrome 已經支援 HTTP/3 的證據。畢竟 HTTP/3 的組成離不開 QUIC 協議。

而在 Curl 命令列工具[https://github.com/curl/curl] 的最新版本, 你只需在常規的命令末尾新增“--HTTP/3”即可使用 HTTP/3,如果目標伺服器支援,它會自然的返回“HTTP/3 200”。

確認了客戶端的支援,我們接下來看一下服務端。

自 2013 年 QUIC 被正式公開以來,到 2020 年已經發展了差不多7年,目前網上已經有了不少熱門開源的專案,除去帶頭大哥 Google 在完成了對自身搜尋引擎的支援,還同時拉上了 Gmail 、YouTube 等站點。但對於國內的絕大部分站點來說,HTTP/3 之路,似乎還停留在東土大唐,即使 Nginx 已經公開宣告:“我們已經支援 QUIC 協議“。

我們可以看到,雖然目前環境還沒有全面迭代到 HTTP/3 ,但是 HTTP/3 的發展是不可阻攔的。

作為一家極客氛圍極強的公司,又拍雲在不少廠商還沒準備好時,苦心鑽研,現已推出 HTTP/3 嚐鮮服務,您可以切身體驗 HTTP/3 帶來的變革。

[但是毫無疑問的,HTTP/3 是目前最前沿的網際網路標準,它的缺點可以通過不斷的改進來完善。相比與 HTTP/3 本身的缺陷問題,作為一項新技術最致命的問題是能否獲得足夠多的有效支援,從而進行大範圍推廣。

那麼當前的環境已經有迎接 HTTP/3 的能力了麼?

HTTP/3 作為網際網路的標準革新之一,在支援方面無非兩點,一個是服務端,一個是客戶端。

先來看一下客戶端,大家所熟悉的瀏覽器 Chrome 以及常用 Curl 命令列工具都已經支援 HTTP/3 特性。在 Chrome 的開發者工具一欄裡你可以看到一項顯示為“HTTP/2+quic/99”,這就是 Chrome 已經支援 HTTP/3 的證據。畢竟 HTTP/3 的組成離不開 QUIC 協議。

而在 Curl 命令列工具[https://github.com/curl/curl] 的最新版本, 你只需在常規的命令末尾新增“--HTTP/3”即可使用 HTTP/3,如果目標伺服器支援,它會自然的返回“HTTP/3 200”。

確認了客戶端的支援,我們接下來看一下服務端。

自 2013 年 QUIC 被正式公開以來,到 2020 年已經發展了差不多7年,目前網上已經有了不少熱門開源的專案,除去帶頭大哥 Google 在完成了對自身搜尋引擎的支援,還同時拉上了 Gmail 、YouTube 等站點。但對於國內的絕大部分站點來說,HTTP/3 之路,似乎還停留在東土大唐,即使 Nginx 已經公開宣告:“我們已經支援 QUIC 協議“。

我們可以看到,雖然目前環境還沒有全面迭代到 HTTP/3 ,但是 HTTP/3 的發展是不可阻攔的。

作為一家極客氛圍極強的公司,又拍雲在不少廠商還沒準備好時,苦心鑽研,現已推出 HTTP/3 嚐鮮服務,您可以切身體驗 HTTP/3 帶來的變革。

立即體驗

推薦閱讀

QUIC/HTTP3 協議簡析

從 HTTP/1 到 HTTP/2,以及即將到來的 HTTP/3

相關文章