HTTP/1.0、HTTP/1.1 和 HTTP/2.0 主要區別

一句話總結

  • HTTP/1.0: 短連接,每次請求都需要建立一個新的 TCP 連接,性能較差。
  • HTTP/1.1: 長連接,默認開啟 Keep-Alive,連接可復用,解決了 1.0 的大部分問題,是目前使用最廣泛的版本。
  • HTTP/2.0: 二進制、多路復用,徹底解決了 1.1 的“隊頭阻塞”問題,大幅提升了傳輸性能。

對比表格(核心區別一覽)

特性HTTP/1.0HTTP/1.1HTTP/2.0
連接方式短連接長連接 (Persistent)多路復用 (Multiplexing)
隊頭阻塞 (HOL)存在存在 (請求級別)基本解決 (單個 TCP 連接內)
協議格式文本 (ASCII)文本 (ASCII)二進制 (Binary)
Header 壓縮HPACK 算法
服務器推送不支持不支持支持 (Server Push)
Host 頭部可選必須必須
緩存處理Expires, Last-ModifiedCache-Control, ETag 等更完善的機制繼承 1.1 并進一步優化

詳細解釋核心區別

下面深入探討這些關鍵改變的含義和影響。

1. 連接方式的進化:從短連接到多路復用

這是三個版本之間最根本的區別,直接影響了性能。

  • HTTP/1.0: 短連接 (Short-lived Connections)

    • 工作模式: 瀏覽器每請求一個資源(如 HTML, CSS, JS, 圖片),都需要建立一個新的 TCP 連接。請求完成后,連接立即關閉。
    • 缺點:
      • 高延遲: 每個資源的請求都包含 TCP 的三次握手和四次揮手過程,開銷巨大。
      • 服務器壓力大: 頻繁地創建和銷毀連接,對服務器資源消耗嚴重。
  • HTTP/1.1: 長連接 (Persistent Connections)

    • 工作模式: 默認啟用 Connection: keep-alive。一個 TCP 連接在發送請求后不會立即關閉,可以被后續的多個請求復用。
    • 優點:
      • 減少延遲: 避免了重復的 TCP 握手和揮手,顯著提高了加載速度。
    • 缺點 (引入了新問題):
      • 隊頭阻塞 (Head-of-Line Blocking): 雖然連接可以復用,但在同一個連接上,請求必須按順序發送和接收。如果前一個請求非常耗時(例如一個大文件),后面的請求即使很小,也必須等待它完成才能被處理。這就像在超市排隊結賬,前面的人買了很多東西,你就得一直等。
      • Pipelining (管道化): 1.1 曾試圖通過管道化技術解決部分問題(即客戶端可以連續發送多個請求而不用等待響應),但由于實現復雜且容易出錯(如代理服務器支持不佳),大部分瀏覽器默認都禁用了它。
  • HTTP/2.0: 多路復用 (Multiplexing)

    • 工作模式: 這是 HTTP/2.0 的革命性改變。它在一個 TCP 連接上,引入了流 (Stream) 的概念。每個請求和響應都作為一個獨立的流,并被分解成更小的幀 (Frame)。這些幀可以交錯發送,然后在另一端根據流 ID 重新組裝。
    • 優點:
      • 徹底解決隊頭阻塞: 因為多個請求/響應可以同時在同一個連接上并行傳輸,一個慢請求不會阻塞其他請求。這就像超市開了多個收銀臺,顧客可以同時結賬,互不干擾。
      • 連接效率更高: 只需建立一個 TCP 連接即可傳輸所有資源,最大化地利用了連接,降低了延遲。
2. 協議格式:從文本到二進制
  • HTTP/1.x: 是人類可讀的文本協議。請求和響應的報文都是純文本字符串,例如:

    GET /index.html HTTP/1.1
    Host: example.com
    User-Agent: curl/7.64.1
    
    • 缺點: 格式不緊湊,解析起來相對慢且容易出錯(比如對空格、換行的處理)。
  • HTTP/2.0: 是二進制協議。所有傳輸的數據都被分割成二進制編碼的幀。

    • 優點:
      • 解析高效: 二進制格式解析起來更高效、更健壯,不易出錯。
      • 體積更小: 為數據壓縮和傳輸優化提供了基礎。
3. Header 壓縮:HPACK 算法
  • HTTP/1.x: 不會對 Header 進行壓縮。每次請求,即使 Header 內容(如 Cookie, User-Agent)基本沒變,也需要完整地發送一遍。當請求很多時,這會產生巨大的、不必要的流量。

  • HTTP/2.0: 使用 HPACK 算法對 Header 進行壓縮。

    • 工作原理:
      1. 靜態表 (Static Table): 客戶端和服務器共同維護一個包含常見 Header(如 :method: GET)的靜態表。
      2. 動態表 (Dynamic Table): 對于會變化的內容(如自定義 Header 或 Cookie),HPACK 會在連接中創建一個動態表,記錄下已經發送過的 Header。后續請求如果包含相同的 Header,只需發送一個索引號即可。
      3. 霍夫曼編碼: 對新的或未在表中的 Header 值使用霍夫曼編碼進行壓縮。
    • 優點: 極大地減少了請求的體積,尤其是在移動端或網絡不佳的環境下,效果非常明顯。
4. 服務器推送 (Server Push)
  • HTTP/1.x: 只能由客戶端發起請求,服務器被動響應。典型的流程是:瀏覽器請求 HTML -> 解析 HTML -> 發現需要 CSS 和 JS -> 再分別發起對 CSS 和 JS 的請求。

  • HTTP/2.0: 允許服務器主動推送資源給客戶端。

    • 工作原理: 當客戶端請求一個 HTML 頁面時,服務器可以預測到客戶端接下來肯定會需要相關的 CSS 和 JS 文件,于是在發送 HTML 的同時,主動將這些資源“推送”給客戶端的緩存。當客戶端解析完 HTML 準備請求這些資源時,會發現它們已經存在于本地了。
    • 優點: 減少了關鍵資源的請求往返時間 (RTT),加快了頁面的“可交互時間”。

總結

  • HTTP/1.0 -> HTTP/1.1: 主要的飛躍是從短連接變為長連接,解決了頻繁建立連接的性能瓶頸,并引入了更完善的緩存機制和 Host 頭(支持了虛擬主機)。
  • HTTP/1.1 -> HTTP/2.0: 是一次徹底的性能革命。通過多路復用、二進制協議、Header 壓縮和服務器推送等關鍵技術,根本上解決了 HTTP/1.1 的隊頭阻塞問題,最大化地提升了 Web 頁面的加載速度和傳輸效率。

簡單來說,HTTP 的演進史就是一部不斷追求**“更快、更省、更高效”**的歷史。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90313.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Navicat 17.3 正式發布 | 現已支持達夢、金倉和 IvorySQL 數據庫

🚀🚀🚀 Navicat 很高興地宣布:Navicat 17.3 版本正式發布。此次更新包含多項突破性功能,包括新增對達夢、金倉和 IvorySQL 等數據庫的支持,全面強化 AI 功能并新增阿里通義千問等 AI 大模型,同…

前端性能新紀元:Rust + WebAssembly 如何在瀏覽器中實現10倍性能提升(以視頻處理為例)

前端性能新紀元:Rust WebAssembly 如何在瀏覽器中實現10倍性能提升(以視頻處理為例) JavaScript,作為 Web 開發的基石,是動態的、靈活的,但在性能上,它也存在著天生的“軟肋”。對于那些計算密…

Web前端:JavaScript find()函數內判斷

🎯 find是什么?find() 是 JavaScript 數組(Array)提供的一個內置方法,用于在數組中查找第一個滿足條件的元素。簡單來說:它像偵探一樣遍歷數組,找到第一個符合條件的成員就返回它。?? 核心作用…

MySQL詳解三

MySQL詳解三事務ACID特性原子性一致性隔離性持久性事務的隔離級別讀未提交(Read Uncommitted)讀已提交(Read Committed)可重復讀(Repeatable Read)串行化(serializable)MVCC聚集索引的隱藏列read view鎖全局…

ABQ-LLM:用于大語言模型的任意比特量化推理加速

溫馨提示: 本篇文章已同步至"AI專題精講" ABQ-LLM:用于大語言模型的任意比特量化推理加速 摘要 大語言模型(LLMs)在自然語言處理任務中取得了革命性的進展。然而,其實際應用受到巨大的內存與計算開銷的限制…

kafka的shell操作

Kafka 提供了豐富的 shell 命令工具,位于 Kafka 安裝目錄的 bin/ 目錄下(Windows 系統為 bin/windows/)。這些命令用于管理主題、生產者、消費者、分區等核心組件。以下是常用的 Kafka shell 操作大全:一、主題(Topic&…

client-go: k8s選主

快速上手 下面這個代碼就是一個選主的大概邏輯 package mainimport ("context""flag""fmt"_ "net/http/pprof""os""path/filepath""time""golang.org/x/exp/rand"v1 "k8s.io/api/core/v…

為什么Java的String不可變?

為什么Java的String不可變? 場景: 你在開發多線程用戶系統時,發現用戶密碼作為String傳遞后,竟被其他線程修改。這種安全隱患源于對String可變性的誤解。Java將String設計為不可變類,正是為了解決這類核心問題。 1??…

在Ubuntu上使用QEMU學習RISC-V程序(1)起步第一個程序

文章目錄一、 引言二、 環境準備三、編寫簡單的RISC-V程序四、 編譯步驟詳解五、使用QEMU運行程序六、程序詳解七、退出QEMU八、總結附錄:QEMU中通過UTRA顯示字符工作原理1、內存映射I/O原理2、add.s程序工作流程3、關鍵指令解析4、QEMU模擬的UART控制器5、為什么不…

R擬合 | 一個分布能看到三個峰,怎么擬合出這三個正態分布的參數? | 高斯混合模型 與 EM算法

1. 效果已知數據符合上圖分布,怎么求下圖的三個分布的參數mu, sigma,及每個分布的權重 lambda? 2. 代碼: 高斯混合模型(Gaussian Mixture Model,簡稱GMM) library(mixtools) set.seed(123) # 確保結果可重復…

Excel自動分列開票工具推薦

軟件介紹 本文介紹一款基于Excel VBA開發的自動分列開票工具,可高效處理客戶對賬單并生成符合要求的發票清單。 軟件功能概述 該工具能夠將客戶對賬單按照訂單號自動拆分為獨立文件,并生成可直接導入發票清單系統的標準化格式。 軟件特點 這是一款體…

【自用】JavaSE--Stream流

概述獲取Stream流集合的stream流集合名.stream( );collection集合List集合與Set集合都屬于Collection集合,因此可以直接調用stream方法獲取stream流,示例如下結果>map集合map集合存在鍵值對,因此無法使用該方法直接獲取stream流&#xff0…

【Elasticsearch】快照與恢復功能詳解

《Elasticsearch 集群》系列,共包含以下文章: 1?? 冷熱集群架構2?? 合適的鍋炒合適的菜:性能與成本平衡原理公式解析3?? ILM(Index Lifecycle Management)策略詳解4?? Elasticsearch 跨機房部署5?? 快照與恢…

技嘉z370主板開啟vtx

技嘉z370vtx應該默認就是開啟狀態,雖然主板開啟的vtx但是系統默認設置會導致vtx不能使用 1. 關閉hyper-V,Windows虛擬機監控程序平臺,虛擬機平臺 控制面板->程序->啟用或關閉windows功能 2.以管理員身份運行CMD bcdedit /set hypervisorlaunchtype off 3.…

Springmvc的自動解管理

中央轉發器&#xff08;DispatcherServlet&#xff09;控制器視圖解析器靜態資源訪問消息轉換器格式化靜態資源管理一、中央轉發器Xml無需配置<servlet><servlet-name>chapter2</servlet-name><servlet-class>org.springframework.web.servlet.Dispatc…

C#_定時器_解析

問題一:這里加lock是啥意思?它的原理是, 為什么可以鎖住? private readonly Timer _timer;/// <summary>/// 構造函數中初始化定時器/// </summary>public FtpTransferService(){// 初始化定時器_timer new Timer(_intervalMinutes * 60 * 1000);_timer.Elapsed…

Trae開發uni-app+Vue3+TS項目飄紅踩坑

前情 Trae IDE上線后我是第一時間去使用體驗的&#xff0c;但是因為一直排隊問題不得轉戰Cursor&#xff0c;等到Trae出付費模式的時候&#xff0c;我已經辦了Cursor的會員&#xff0c;本來是想等會員過期了再轉戰Trae的&#xff0c;但是最近Cursor開始做妖了 網上有一堆怎么…

低代碼中的統計模型是什么?有什么作用?

低代碼開發平臺中的統計模型是指通過可視化配置、拖拽操作或少量代碼即可應用的數據分析工具&#xff0c;旨在幫助技術人員及非技術人員快速實現數據描述、趨勢預測和業務決策。其核心價值在于降低數據分析門檻&#xff0c;使業務人員無需深入掌握統計原理或編程技能&#xff0…

Linux 下在線安裝啟動VNC

描述 Linux中的VNC就類似于Windows中的遠程桌面系統 本文只記錄在Cent OS 7的系統下在線安裝VNC。 安裝VNC 1、安裝VNC yum install tigervnc-server2、配置VNC的密碼 為用戶設置 VNC 密碼&#xff08;首次運行會提示輸入&#xff0c;也可以提前輸入&#xff09; vncpasswd密碼…

支持OCR和AI解釋的Web PDF閱讀器:解決大文檔閱讀難題

支持OCR和AI解釋的Web PDF閱讀器&#xff1a;解決大文檔閱讀難題一、背景&#xff1a;為什么需要這個工具&#xff1f;問題場景解決方案二、技術原理&#xff1a;如何實現這些功能&#xff1f;1、核心技術組件2、工作流程3、關鍵點三、操作指南1、環境準備2、生成Html代碼3、We…