詳情說明HTTP/1, HTTP/2和HTTP/3三者間的區別

詳情說明HTTP/1, HTTP/2和HTTP/3三者間的區別

超文字傳輸協議(HTTP)是全球資訊網上資料通訊的基礎。多年來,它不斷髮展以滿足現代網路應用日益增長的需求。在這篇文章中,我們將探討HTTP/1.1、HTTP/2和HTTP/3之間的區別,討論每個版本如何在其前身的基礎上進行改進以提高網路效能和使用者體驗。

什麼是HTTP?

HTTP(超文字傳輸協議)是在世界範圍內的網路上進行資料通訊的方式(不要與網際網路混淆,兩者是有區別的)。有3個主要版本,我們將在這裡逐一介紹。

簡單地說,該協議定義了瀏覽器如何與伺服器對話以來回傳遞資料。在所有版本的協議中,瀏覽器會提出一些要求(”請求”),而伺服器會發回資料(”響應”)。這是一個簡單的概念,但隨著時間的推移,事情變得越來越複雜,作為網路開發人員,我們必須瞭解該協議的後期版本有何不同。

第1節:HTTP/1.1–基礎

HTTP/1.1於1997年推出,是對最初的HTTP/1.0的修訂,很快成為網路的標準協議。今天開發者熟悉的許多功能都是在HTTP/1.1中引入的。HTTP/1.1的一些關鍵改進和功能包括:

  1. 持久連線:與HTTP/1.0不同的是,HTTP/1.1在每個請求-響應週期後都會關閉連線,而HTTP/1.1引入了持久連線,允許在一個連線上傳送多個請求和響應,減少延遲並提高效能。
  2. Pipelining:HTTP/1.1還引入了流水線的概念,它允許在一個連線上傳送多個請求,而不需要等待對前一個請求的響應。這提高了效率,但仍然受到 “線頭阻塞 “問題的困擾,即如果第一個請求需要太長時間才能完成,那麼後續請求的處理就會被推遲。
  3. 分塊傳輸編碼:這個功能允許伺服器以較小的塊來傳送響應,而不是等待整個響應生成後再傳送給客戶端。這提高了網路應用的感知效能。
  4. 快取控制機制:HTTP/1.1引入了各種快取控制頭,以管理客戶端如何快取和重新驗證資源,通過減少冗餘資料傳輸的需要來提高網路效能。

熟悉HTTP協議的人一般會對HTTP 1.1最為熟悉。在檔案、資產和資料的傳輸方面,它的行為是大多數網路開發者所期望的那樣。

HTTP 1.1是一個簡單的請求和響應模型。瀏覽器要求提供一個檔案,而伺服器則對此作出迴應。當你考慮到一個普通的網頁可能有幾十種資產(圖片、樣式表、指令碼等)時,這就導致了在一個鏈條上有很多的請求和響應。

HTTP/1.1是一個相當簡單的概念。讓我們看看一個請求是如何工作的:

  1. 你導航到一個網站,在這個例子中,我們說accreditly.io。你的瀏覽器向伺服器傳送了一個GET請求:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    GET accreditly.io
    GET accreditly.io
    GET accreditly.io
  2. 伺服器收到請求和響應的檔案:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    200 OK
    <html>
    <head>
    <title>Accreditly - Web Development Certifications</title>
    [...]
    200 OK <html> <head> <title>Accreditly - Web Development Certifications</title> [...]
    200 OK
    
    <html>
      <head>
        <title>Accreditly - Web Development Certifications</title>
        [...]
  3. 在該檔案中,可能有各種資產。像圖片、樣式表(CSS檔案)和JavaScript資產(.js檔案)。你的瀏覽器讀取文件,並對佇列中的每個資產重複步驟1和2。

這是一個簡單的流程,很容易理解,但這裡有幾個問題:

  • a. 線頭阻塞: 每個HTTP/1.x連線一次只能處理一個請求。這種限制常常導致網路資源的低效使用,因為隨後的請求必須等待前一個請求的完成。
  • b. 缺少優先順序: HTTP/1.x沒有提供一種對請求進行優先排序的方法,這可能導致不太重要的資源阻塞更重要的資源。
  • c. 還有其他一些問題,比如傳送的純文字標題很大,尤其是在使用cookies時。

所有這些問題都有很大的效能影響,特別是在現代網路上。

第2節:HTTP/2–解決效能問題

2015年釋出的HTTP/2,旨在解決HTTP/1.1的一些效能限制,同時保持與現有應用程式的相容性。HTTP/2的主要改進和特點包括:

  1. 二進位制框架層:與基於文字的HTTP/1.1不同,HTTP/2使用二進位制框架層,允許更有效的解析,減少延遲,並降低資料傳輸方面的開銷。

     

  2. 複用:在HTTP/2中,由於新的二進位制構架層,多個請求和響應可以在一個連線上同時傳送。這消除了HTTP/1.1中存在的線頭阻塞問題,使網路資源得到了更有效的利用。

     

  3. 標頭壓縮:HTTP/2使用HPACK,一種專門為HTTP頭設計的壓縮演算法,以減少需要通過網路傳送的資料量。這減少了延遲,提高了網路效能,特別是對於連線速度較慢的使用者。

     

  4. 伺服器推送:該功能允許伺服器在客戶明確要求之前將資源傳送給客戶,可能會減少載入網頁所需的往返次數。

     

  5. 流優先順序:HTTP/2允許客戶為不同的請求分配優先順序,使伺服器能夠更有效地分配資源,更快地提供高優先順序的內容。

Web頁面平均體積日益增大

圖片來源:HTTP Archive

與過去相比,現在網頁的平均大小是巨大的。此外,網頁現在載入資產的速度遠遠超過了我們連線速度的提高。根據HTTP檔案,網頁上的影象的平均尺寸增長了8000%,影象的數量也是如此,這還沒有涉及到JavaScript和其他資產。這是一個大問題。

那麼,HTTP/2有什麼幫助?

HTTP/2中引入了許多功能,人們關注的主要好處是多路複用

網路開發者享有的HTTP/2的主要好處之一是能夠複用資產。雖然協議本身的作用比這個簡單的例子要多得多,但想象一下上面的單個網頁的例子,在HTTP 1.1中,資產是一次一個地被載入。有了HTTP/2,瀏覽器和伺服器的溝通就更有效率了,在一個請求中請求文件、資產、影象、樣式表、指令碼等,然後在伺服器的一個響應中接收它們。

http1 vs http2:多路複用

圖片來源:Accreditly

瀏覽器和伺服器都需要支援HTTP/2才能進行,儘管現在很少有不支援的情況。

HTTP/2依靠相同的底層協議來執行: TCP。這既是積極的一面,也是消極的一面。因為HTTP/1.x已經使用了TCP,這意味著採用它要容易得多;瀏覽器不需要實現一個新的底層協議,而伺服器可以繼續像現在這樣執行,只需進行一些調整就可以實現HTTP/2的功能。缺點是,TCP存在一些問題,特別是在高延遲和有損的網路中。

第3節:HTTP/3–進入QUIC

HTTP/3是該協議的最新版本,目前正在進行標準化和採用。它引入了重大變化,以解決HTTP/2的限制,並進一步提高網路效能。HTTP/3中最顯著的變化是用新的QUIC協議取代了傳輸控制協議(TCP)。QUIC是快速UDP網際網路連線的縮寫,是一個傳輸層協議,旨在提供比TCP更低的延遲和更好的效能。

HTTP/3的主要改進和特點包括:

  1. QUIC協議:QUIC是一個比TCP更有效的傳輸層協議,提供更快的連線建立,內建加密和更好的擁堵控制。它還消除了傳輸層的線頭阻塞,進一步提高了網路效能。

     

  2. 基於UDP的傳輸:與使用TCP的HTTP/1.1和HTTP/2不同,HTTP/3使用使用者資料包協議(UDP)。UDP是一個無連線協議,允許更快的資料傳輸和更低的延遲。然而,它不能保證可靠的交付,所以QUIC納入了自己的可靠性機制。

     

  3. 連線遷移:QUIC支援連線遷移,允許客戶在網路介面之間切換(例如從Wi-Fi到移動資料)而不中斷正在進行的連線。這對於可能經常在不同網路之間切換的移動裝置特別有用。

     

  4. 改進安全性:QUIC包括基於傳輸層安全(TLS)1.3的內建加密,確保客戶端和伺服器之間的安全通訊。該協議還提供額外的安全功能,如防止連線偽造和篡改。

通過quic進行http請求

圖片來源:Cloudflare關於HTTP/3的文章

HTTP/3和QUIC聽起來不錯,對嗎?

嗯,是的,在理論上。問題是,對於瀏覽器和供應商來說,實現這些功能是一個很大的任務,更不用說與網路基礎設施的相容性問題。

許多大型網路根本不支援UDP,因此,在UDP之上的新協議上輸送流量,可能是一個遙遠的過程。

也就是說,像Cloudflare這樣的大公司正在為他們的客戶提供HTTP/3的支援,而且Chrome、Edge和Firefox等瀏覽器也有支援。你可能會注意到Safari不在這個名單中;蘋果公司在提供對新功能和協議的支援方面通常比較晚,而且經常實施他們自己的版本的東西。根據CanIUse的說法,Safari對HTTP/3有部分支援,而且只對一些使用者可用。但請記住,HTTP/3還沒有正式釋出,所以事情可能會發生變化。

第4節:比較和採用

雖然HTTP/1.1已經為網路服務了很多年,但HTTP/2和HTTP/3提供的效能改進是非常大的。HTTP/2和HTTP/3都解決了HTTP/1.1的侷限性,並提供了對現代網路應用至關重要的功能,如多路複用、頭壓縮和改進的安全性。

HTTP/2已經被廣泛採用,大多數現代瀏覽器和網路伺服器都支援它。另一方面,HTTP/3仍處於採用的早期階段,但隨著協議的成熟和證明其價值,支援也在增加。

值得注意的是,HTTP/2和HTTP/3的設計是向後相容HTTP/1.1的,因此網路開發者可以逐步採用這些較新的協議而不破壞現有的應用程式。實施HTTP/2和HTTP/3通常涉及更新網路伺服器和瀏覽器,而應用程式程式碼基本保持不變。

說到這裡,從HTTP 1.1到HTTP/2的轉變相對來說是不痛不癢的,因為兩者都是坐在相同的基礎技術和協議上: TCP。從HTTP/2到HTTP/3需要採用QUIC和UDP,以及對TLS 1.3的獨家支援,這是一種用於加密流量的技術,目前還沒有被完全採用。

小結

HTTP從1.1版本到HTTP/2和HTTP/3的演變表明了為提高網路效能和使用者體驗所做的持續努力。每個版本都引入了新的功能和改進,以解決其前身的侷限性,從而使網路更快,更有效,更安全。

作為一個網路開發者,必須瞭解這些進展,並準備在新技術得到更廣泛的支援時採用它們。通過了解HTTP/1.1、HTTP/2和HTTP/3之間的差異,你將更好地優化你的網路應用,併為你的使用者提供儘可能好的體驗。

評論留言