HTTP 網絡協議演進過程

網絡協議演進問題,涉及到HTTP版本之間的連接復用優化和協議升級(特別是從HTTP/2到HTTP/3)的核心變化。我們以 HTTP/1.0 到 HTTP/2.0,再到 HTTP/3.0 的演進順序來詳細解釋它們在通道復用(TCP/QUIC)上的優化和升級。

📌 一、HTTP/1.0 到 HTTP/1.1 到 HTTP/2 的通道復用優化

🔎 1. HTTP/1.0

  • 特點:每次請求都需要建立新的TCP連接(無連接復用)。

  • 問題 :

    • 高延遲(每次請求都要進行TLS握手和TCP連接建立);
    • 對帶寬的占用高(HTTP請求和響應獨立,無法共享帶寬);
    • 無法利用并發優勢(多個請求只能按順序發送)。
  • 不支持TCP連接復用、多路復用、流處理、優先級控制

? HTTP/1.0 是首次實現HTTP 請求與響應,但沒有在連接復用上做任何優化


🔎 2. HTTP/1.1

  • 特點:引入了持久連接(Persistent Connections)管道化(Pipelining)

  • 通道復用優化 :

    1. TCP 連接復用:通過 Connection: keep-alive 頭,保持 TCP 連接打開,避免重新建立連接;
    2. 請求并行:支持多請求并發(但由于 HTTP 的請求-響應模型,仍無法真正并發處理,請求順序執行);
    3. 性能提升:減少連接建立的開銷,提升了吞吐量;
    4. 不支持 Stream 并發:多個資源仍需在TCP連接上順序發送
  • 限制 :

    • 不能處理復雜的 HTTP 請求流和資源重疊;
    • 依然依賴 TCP,所以具有 TCP 的限制(如擁塞控制、隊頭阻塞等)。

? HTTP/1.1 的優化是TCP連接復用和請求順序執行


🔎 3. HTTP/2

  • 特點:基于二進制幀傳輸,引入了多路復用(Multiplexing)流(Stream)優先級服務器推送(Server Push)

  • 通道復用優化(相對 HTTP/1.1) :

    1. 多路復用(Multiplexing) :

      • 同一個TCP連接傳輸多個請求/響應流(每個流是獨立的);
      • 消除了 HTTP/1.1 中的“請求隊列”,多個請求可以并行
      • 突破隊頭阻塞(Head-of-line blocking)的瓶頸。
    2. 流處理(Stream) :

      • 請求和響應可以交錯傳輸,例如同時發送 HTML、CSS、JS;
      • 提升加載速度,改善用戶體驗。
    3. 優先級控制 :

      • :priority:weight 頭字段用于請求流的優先級設置
      • 支持對資源(如 HTML > CSS > JS)進行優先權調節
    4. 服務器推送(Server Push) :

      • 支持服務器主動推送資源給客戶端;
      • 在客戶端請求一方時,服務器提前發送資源,提升性能。

? HTTP/2 在“通道復用”上做了根本性的優化,打破了 HTTP/1.1 的單請求單連接限制

🌐 二、HTTP/3.0 對比 HTTP/2.0 的升級

HTTP/3.0 的主要目標是解決 HTTP/2 的性能問題(如擁塞控制、延遲、連接恢復等),其核心升級點之一是從 TCP 協議切換為 QUIC 協議,帶來了更高級別的通道復用能力。


🔎 1. 協議層升級:QUIC(用戶空間協議)

  • 用途:HTTP/3.0 使用 QUIC 協議,替換了 HTTP/2 的 TCP 協議。

  • 優勢 :

    • 支持多路復用(Multiplexing):如 HTTP/2 一樣,支持多個流并行傳輸;
    • 但 QUIC 的多路復用不會受到 TCP 的擁塞控制限制,因此**沒有隊頭阻塞(HOLB)**問題;
    • 支持連接恢復(Connection Migration):比如用戶在移動設備切換 Wi-Fi 和 4G 時,無需重新建立連接;
    • 支持加密連接(QUIC 內建 TLS,無需明文協商);
    • 支持QPS(每秒查詢數)實時控制,適合大規模并發場景。

? HTTP/3.0 相比 HTTP/2.0 最大的升級是使用 QUIC 代替 TCP,提升了連接可靠性與并發效率

🔎 2. 并發能力對比:

特性HTTP/2HTTP/3
是否支持多路復用? 支持? 支持(且更高效)
是否支持加密連接? 支持? 內建 TLS
是否支持連接恢復? 不支持(依賴 TCP)? 支持(通過 QUIC)
是否支持隊頭阻塞? 有(部分)? 無(QUIC 防止 HOLB)
是否支持流優先級? 支持(服務端或瀏覽器)? 支持(QUIC 下流優先級不影響多路復用)

🔎 3. HTTP/3.0 其他關鍵優化

  1. 連接恢復(Connection Migration):
    • 支持在 IP 地址變化時(如切換 Wi-Fi),QUIC 可以繼續使用同一個連接
    • TCP 遇到 IP 變化時需要重新建立連接,導致性能下降。
  2. 更低的延遲(Reduced Latency):
    • 因為QUIC支持0-RTT(First-RTT)握手;
    • 接收方的IP變換時,服務器可以立即發送數據
    • HTTP/2 則依賴 TCP 三次握手,延遲更高
  3. 更好的擁塞控制(Improved Congestion Control):
    • QUIC 使用的是 改進的基于 UDP 的擁塞控制算法,處理網絡擁塞更智能;
    • 在 TCP 上傳統的擁塞控制(如 Reno)在高延遲或丟包情況下效率較低。
  4. 支持連接升級(CONNECT):
    • HTTP/3 通過 QUIC 可以支持連接升級,實現更靈活的網絡控制;
    • 例如在某些場景不可中斷傳輸時(如連接中斷),QUIC 自動重傳機制更快。

📌 三、HTTP 1.0 到 HTTP 3.0 的通道復用演進總結

協議通道復用方式流處理優先級連接恢復加密延遲隊頭阻塞協議底層(用于復用)
HTTP/1.0? 無? 無? 無? 不支持? 無? 無? 存在? TCP
HTTP/1.1? 支持 TCP 連接復用? 無? 無? 不支持? 支持? 高? 存在? TCP
HTTP/2? 支持 TCP 多路復用? 支持流處理? 支持? 不支持? 支持? 低? 部分? TCP
HTTP/3? 支持 QUIC 多路復用? 支持流處理? 支持? 支持? 支持? 極低? 不支持? QUIC

? 從 HTTP/1.1 到 HTTP/3.0,通道復用逐步從連接復用(HTTP/1.1)演進到基于 QUIC 的高級多路復用(HTTP/3.0)


📌 四、使用 HTTP/3 的實踐與優勢

1. 前端配置

  • 使用 HTTP/3 的服務器設置(如 HTTPS -> HTTP/3);
  • HTML 中可使用 <link rel="preload"><script fetchpriority="high"> 提升加載速度。

2. 服務端配置

  • 使用 支持 QUIC 的 Web 服務器(如 Nginx、Caddy、Envoy、Cloudflare);
  • 開啟 HTTP/3 協議支持(如 Nginx 配置示例):
listen 443 ssl http3;

? 現代 Web 服務器(如 Nginx)從 1.18 版本開始支持 HTTP/3,你可以在配置文件中啟用。


📌 五、結論與比較圖表

? 通道復用性能對比(從 HTTP 1.0 到 HTTP/3.0):

HTTP 版本通道復用能力流處理優先級延遲隊頭阻塞協議基礎
HTTP/1.0? 無? 無? 無? 高? 存在TCP
HTTP/1.1? 支持? 無? 無? 高? 存在TCP
HTTP/2? 支持? 支持? 支持? 低? 有TCP
HTTP/3? 支持? 支持? 支持? 低? 無QUIC

? HTTP/3 在復用、延遲和連接恢復方面有質的飛躍,其基于 QUIC 的設計更適合應對動態網絡環境,以及降低端到端延遲


🧠 六、誰在什么場景需要這些協議層優化?

場景適用 HTTP 版本優化需求
簡單 Web 應用HTTP/1.1降低連接建立延遲
高流量、長尾資源網頁HTTP/2多路復用、流優先級、服務器推送
移動設備 / 高延遲網絡HTTP/30-RTT 握手、連接恢復
高性能 API、微服務HTTP/2 / HTTP/3多路復用和連接復用
混合網絡環境(WiFi + 4G)HTTP/3連接遷移(Connection Migration)

? 七、推薦做法

  1. HTTP/2 啟用建議:
    • 若資源較多且字節傳送效率要求高;
    • 使用 :prioritypush 提升性能;
    • 通過 curl -v 或 DevTools 觀察請求流。
  2. HTTP/3 啟用建議:
    • 如果是高性能、高并發 / 高延遲環境;
    • 使用支持 QUIC 的服務器(如 Nginx、Caddy、Cloudflare);
    • 開啟 http3 配置;
    • 適合 移動端應用、WebGL 資源加載

📌 八、通過代碼或命令測試 HTTP/3 是否在使用?

1. 命令行(使用 curl 和 Chrome):

curl -I --http3 https://example.com

或查看 Chrome 網絡面板中 “Protocol” 字段。

2. Node.js 測試是否支持 HTTP/3:

const http3 = require('http3');http3.get('https://example.com').then(res => {console.log(res.headers); // 確認是否使用了 HTTP/3
});

? Node.js 從 14.9 版本起支持 HTTP/3 的實現(通過 node:http3 模塊)。


🧩 九、HTTP/3 是否 RTT 更小?

  • 是的,HTTP/3 的0-RTT 握手(在首次建立連接時);
  • 減少端到端延遲,適合PWA 或實時應用
  • HTTP/2 雖然優化了多路復用,但標準的三次握手還是存在。

📌 十、PWA、WebAssembly、WebGL 可以受益于 HTTP/3?

是的,尤其是:

  • PWA(漸進式 Web 應用):可以更快加載資源,提升體驗;
  • WebAssembly / WebGL / WebGL 資源(如紋理):需要低延遲和高并發傳輸;
  • Node.js 服務端推送:可以通過 HTTP/3 更好地實現。

? 十一、一句話總結

HTTP/1.1 通過 TCP 連接復用提升了性能HTTP/2 在 HTTP/1.1 的基礎上進一步通過多路復用與流優先級優化了用戶體驗而 HTTP/3 通過 QUIC 協議實現了更高級別的多路復用和連接可靠性

其他鏈接 https://github.com/shangwenhe/shangwenhe.github.io/issues/29

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

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

相關文章

Xsens動捕和Manus數據手套在元宇宙數字人制作中提供解決方案

硬件連接與數據傳輸 Xsens與Manus集成&#xff1a;Xsens慣性動作捕捉系統負責捕捉人體的身體動作&#xff0c;Manus數據手套專門精確捕捉手指動作。Xsens動捕套裝上有接口或無線連接模塊&#xff0c;可與Manus手套配對和傳輸數據&#xff0c;將身體與手指跟蹤數據結合。 Face…

【Java開發日記】簡單說一說使用 Netty 進行 Socket 編程

目錄 什么是 Netty 對比Netty和傳統的Socket 傳統Socket編程服務端 傳統Socket編程客戶端 Netty環境搭建 先創建出來一個項目 Netty服務端程序 Netty客戶端程序 Channel Channel分類 為什么選擇Netty 什么是 Netty Netty是由JBOSS提供的一個java開源框架&#xff0c…

目標檢測任務的評估指標mAP50和mAP50-95

mAP50 和 mAP50-95 是目標檢測任務中常用的評估指標&#xff0c;用于衡量模型在不同 交并比&#xff08;IoU&#xff09;閾值 下的平均精度&#xff08;Average Precision, AP&#xff09;。它們的區別主要體現在 IoU 閾值范圍 上。 ? 1. mAP50&#xff08;mean Average Prec…

COHERENT XPRV23光電接收器控制軟件

COHERENT XPRV23光電接收器控制軟件

執行應用共享內存空間 同步QT進行快速捕獲數據流

引言&#xff1a;本文章針對驅動的應用app&#xff0c;例如sensor data內容的獲取&#xff0c;顯示到QT的一種辦法&#xff0c;共享內存。舉例子&#xff0c;這是一個常見需求&#xff0c;比如攝像頭采集進程與 GUI 顯示進程分離&#xff0c;通過共享內存傳輸圖像&#xff0c;避…

opencl的簡單介紹以及c++實例

&#x1f9e9; 一、什么是 OpenCL&#xff1f; OpenCL&#xff08;Open Computing Language&#xff09; 是一個用于異構計算的開放標準&#xff0c;由 Khronos Group 提出和維護。它允許你在各種計算設備上&#xff08;如 CPU、GPU、DSP、FPGA&#xff09;并行運行代碼&#…

ThingsCloud事物云平臺搭建-微信小程序

ThingsCloud云平臺與微信小程序設計 本文主要是介紹ThingsCloud云平臺的搭建及微信小程序與app的使用。 當前文章是作為一個通用案例,介紹如何快速使用 ThingsCloud云平臺 以及 利用 ThingsCloud云平臺平臺的框架快速設計手機APP和微信小程序。 可以快速讓硬件接入,實現硬件…

2024 一帶一路暨金磚國家職業技能大賽(金磚國家未來技能和技術挑戰賽)

2024 一帶一路暨金磚國家職業技能大賽&#xff08;金磚國家未來技能和技術挑戰賽任務書&#xff09; 1 參加比賽的形式&#xff1a;2 項目階段簡介&#xff1a;3 項目階段和所需時間&#xff1a;4 第一階段&#xff1a;職業素養與理論技能4.1 項目 1.職業素養4.2 項目 2.法律法…

2025-06-13【api】阿里百煉api調用方法

通過調用各種大模型可以完成對文生文&#xff0c;文生圖&#xff0c;圖片理解&#xff0c;文生視頻&#xff0c;音頻識別&#xff0c;文轉音頻等需求。 #方法一 import os from openai import OpenAI# 初始化客戶端 client OpenAI(api_keyos.getenv("DASHSCOPE_API_KEY&…

軟件工程的軟件生命周期通常分為以下主要階段

軟件工程的軟件生命周期通常分為以下主要階段&#xff1a; 可行性分析 &#xff1a;評估項目的技術、經濟、操作和法律可行性&#xff0c;確定項目是否值得開發。需求分析 &#xff1a;明確用戶需求&#xff0c;定義軟件功能和非功能需求&#xff0c;形成需求規格說明書。系統…

Spring依賴注入的四種方式(面)

目錄 1. 構造器注入 2. 字段注入 3. Setter注入 4. 方法注入 最佳實踐建議 1. 構造器注入 Service public class UserService {private final UserRepository userRepository;Autowired // Spring 4.3 可以省略public UserService(UserRepository userRepository) {this.…

通信網絡編程2.0——JAVA

一、傳統阻塞式 I/O 模型 實現簡易多人聊天系統&#xff1a;服務端與客戶端 服務端 public class ChatServer {int port 6666;// 定義服務器端口號為 6666ServerSocket ss;// 定義一個 ServerSocket 對象用于監聽客戶端連接//List<Socket> clientSockets new ArrayL…

(轉)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件幫我們快速的部署分布式應用&#xff0c;而無需手動一個個創建和運行容器。 Compose文件是一個文本文件&#xff0c;通過指令定義集群中的每個容器如何運行。 DockerCompose就是把DockerFile轉換成指令去運行。 …

Python打卡第51天

浙大疏錦行 作業&#xff1a; day43的時候我們安排大家對自己找的數據集用簡單cnn訓練&#xff0c;現在可以嘗試下借助這幾天的知識來實現精度的進一步提高 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from tor…

Notepad++ 官方下載

https://notepad-plus-plus.org/downloads/ 下載官網 1、https://github.com/notepad-plus-plus/notepad-plus-plus/releases 2、https://notepad-plus-plus.org/news/v881-we-are-with-ukraine/

運維之十個問題--2

目錄 1. 如果有ip惡意刷流量怎么辦 2. 標準端口范圍 3.內存16G&#xff0c;交換分區多大 4.請簡述非對稱加密算法&#xff0c;ping命令通過什么協議實現&#xff0c;icmp是什么協議 5.客戶訪問網站速度慢原因 6. 進程和線程的區別 7.zabbix監控是你搭建的嗎&#xff0c;平…

vue前端面試題——記錄一次面試當中遇到的題(1)

1.v-if和v-show的區別 v-if和v-show都是Vue中用于條件渲染的指令&#xff0c;但它們的實現機制和適用場景有所不同&#xff1a; v-if是真正的條件渲染&#xff0c;在條件切換時會銷毀和重建DOM元素&#xff0c;適合運行時條件變化不頻繁的場景&#xff1b; v-show只是通過CS…

【QT面試題】(三)

文章目錄 Qt信號槽的優點及缺點Qt中的文件流和數據流區別&#xff1f;Qt中show和exec區別QT多線程使用的方法 (4種)QString與基本數據類型如何轉換&#xff1f;QT保證多線程安全事件與信號的區別connect函數的連接方式&#xff1f;信號與槽的多種用法Qt的事件過濾器有哪些同步和…

Vscode下Go語言環境配置

前言 本文介紹了vscode下Go語言開發環境的快速配置&#xff0c;為新手小白快速上手Go語言提供幫助。 1.下載官方Vscode 這步比較基礎&#xff0c;已經安裝好的同學可以直接快進到第二步 官方安裝包地址&#xff1a;https://code.visualstudio.com/ 雙擊一直點擊下一步即可,記…

HTML 文本省略號

目錄 HTML 文本省略號超行省略號如何實現1. 單行文本溢出顯示省略號2. 多行文本溢出顯示省略號方法一&#xff1a;使用 -webkit-line-clamp&#xff08;推薦&#xff09;方法二&#xff1a;使用偽元素&#xff08;兼容性好&#xff09;方法三&#xff1a;使用 JavaScript 動態監…