HTTP/2 與 HTTP/1.1 的比較:其如何影響 Web 效能?

HTTP/2 允許開發人員自訂優先順序或 Web 資產載入的順序。與 HTTP/1 相比,HTTP/2 還提供了許多其他的效能改進。

學習目標

閱讀本文後,您將能夠:

  • 瞭解什麼是 HTTP,以及 HTTP 版本之間的差異
  • 瞭解 HTTP/2 中優先順序的運作原理
  • 探索 HTTP/2 改善 Web 效能的方法

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

使用 Cloudflare Pro 方案和我們的速度工具附加元件來提高網站效能

什麼是 HTTP?為什麼 HTTP/2 比 HTTP/1.1 更快?

HTTP 代表超文字傳輸通訊協定,它幾乎是所有 Web 應用程式的基礎。更具體地說,HTTP 是電腦和伺服器用於請求和傳送資訊的方法。例如,當有人在筆記型電腦上導航到 cloudflare.com 時,他們的 Web 瀏覽器會向 Cloudflare 伺服器傳送 HTTP 請求,以獲取頁面上顯示的內容。然後,Cloudflare 伺服器會傳送 HTTP 回應,其中包含瀏覽器向使用者顯示的文字、影像和格式。

什麼是 HTTP 版本?

HTTP 的第一個可用版本誕生於 1997 年。由於它經歷了多個開發階段,因此 HTTP 的第一個版本稱為 HTTP/1.1。此版本仍在網路上使用。

HTTP/2 是什麼?

2015 年誕生了一個新的 HTTP 版本,稱為 HTTP/2。HTTP/2 解決了 HTTP/1.1 的創造者未曾預料的幾個問題。特別是,HTTP/2 比 HTTP/1.1 更快,更高效。HTTP/2 速度更快的一個表現是在載入過程中如何對內容進行優先順序排序。

什麼是優先順序?

Web 效能的環境中,優先順序是指載入內容片段的順序。假設使用者造訪新聞網站並導覽至一篇文章。應該先載入文章頂部的照片?先載入文章的文字?還是先載入橫幅廣告?

優先順序會影響網頁的載入時間。例如,某些資源(例如大型 JavaScript 檔案)如果必須先載入,則可能會阻礙頁面其餘部分的載入。如果最後載入這些阻礙呈現的資源,則可以一次載入頁面的更多部分。

另外,這些頁面資源的載入順序會影響使用者對頁面載入時間的感知。如果僅首先載入幕後內容(如 CSS 檔案)或使用者無法立即看到的內容(如頁面底部的橫幅廣告),則使用者會認為該頁面根本沒有載入。如果首先載入對使用者最重要的內容(例如頁面頂部的影像),則使用者會覺得頁面載入速度更快。

HTTP/2 中的優先順序如何影響效能?

在 HTTP/2 中,開發人員可以親自動手操作,對優先順序進行詳細控制。這使他們能夠將感知和實際頁面載入速度最大化到 HTTP/1.1 無法企及的程度。

HTTP/2 提供了一個稱為加權優先順序的功能。開發人員可以決定每次先載入哪些頁面資源。在 HTTP/2 中,當用戶端請求網頁時,伺服器會一次性將多個資料流傳送到用戶端,而不是逐個依次傳送。這種資料遞送方法稱為多工。開發人員可以為這些資料流分別指派一個不同的加權值,該值告訴用戶端首先要呈現哪個資料流。

想像一下,Alice 想讀她的朋友 Bob 寫的小說,但 Alice 和 Bob 都只透過普通郵件進行交流。Alice 給 Bob 寫了一封信,要求 Bob 將他的小說寄給她。Bob 決定按 HTTP/1.1 樣式寄送小說:他一次郵寄一章,只有在收到 Alice 確認她收到了上一章的回信後,他才郵寄下一章。使用這種內容傳遞方法,Alice 需要數週時間才能閱讀完 Bob 的小說。

現在假設 Bob 決定按 HTTP/2 樣式向 Alice 寄送他的小說:在這種情況下,他分別郵寄小說的每一章(以保持在郵政服務的大小限制內)但同時寄送。他還為每一章編號:第 1 章、第 2 章等。現在,Alice 一下子收到了這本小說,並可以在她自己的時間按正確的順序組裝起來。如果缺少一章,她可能會寄送一個快速回覆,要求找到那一章,否則這個過程就完成了,Alice 可以在幾天內讀完這本小說。

在 HTTP/2 中,資料是一次性傳送的,就像 Bob 一次給 Alice 寄送多個章節一樣。就像 Bob 一樣,開發人員開始對 HTTP/2 中的章節進行編號。他們可以決定是先載入網頁文字,還是先載入 CSS 檔案或 JavaScript,或者他們認為對使用者體驗最重要的任何內容。

HTTP/2 和 HTTP/1.1 對效能的影響有何其他區別?

多工:HTTP/1.1 依次載入各個資源,因此,如果無法載入某一資源,它將阻礙其後的所有其他資源。相比之下,HTTP/2 可以使用單個 TCP 連線來一次傳送多個資料流,使得任何資源都不會阻礙其他資源。為此,HTTP/2 將資料拆分為二進位程式碼訊息並為這些訊息編號,以便用戶端知道每個二進位訊息所屬的流。

伺服器推送:一般而言,伺服器只會在用戶端要求時才向用戶端裝置提供內容。但是,這種方法對於現代網頁並非始終可行,因為這些網頁通常涉及用戶端必須請求的幾十個單獨資源。HTTP/2 透過允許伺服器在用戶端請求之前向用戶端「推送」內容來解決此問題。伺服器還會傳送一條訊息,讓用戶端知道預期推送的內容是什麼,就像 Bob 在寄送整本書之前向 Alice 寄送小說目錄一樣。

標頭壓縮:小檔案的載入速度比大檔案快。為了提高 Web 效能,HTTP/1.1 和 HTTP/2 都會壓縮 HTTP 訊息以使其更小。但是,HTTP/2 使用一種稱為 HPACK 的更進階壓縮方法,可以消除 HTTP 標頭封包中的多餘資訊。這樣可以從每個 HTTP 封包中消除幾個位元組。考慮到即使只載入一個網頁時所涉及的 HTTP 封包的數量,這些位元組會迅速累加,從而加快了載入速度。

什麽是 HTTP/3?

HTTP/3 是 HTTP 通訊協定的下一個提議版本。HTTP/3 尚未在 Web 上廣泛採用,但它的使用量正在增長。HTTP/3 和以前版本的通訊協定之間的主要區別在於 HTTP/3 透過 QUIC 而不是 TCP 執行。QUIC 是一種更快、更安全的傳輸層通訊協定,專為現代網際網路的需求而設計。

Cloudflare 如何幫助開發人員實作 HTTP/2 以獲得更快的效能?

Cloudflare 支援 HTTP/2 的所有功能。Cloudflare 上的 Web 內容可以一鍵免費開啟 HTTP/2。除了 HTTP/2 之外,Cloudflare 還支援 HTTP/3。如果您受到最近的 HTTP/2 Rapid Reset 攻擊的影響,請聯絡我們以立即獲得保護