HTTP 2.0 協議特性詳解

1. 使用二進制協議,簡化傳輸的復雜性,提高了效率

2. 支持一個 TCP 鏈接發起多請求,移除 pipeline

HTTP/2 移除了 HTTP/1.1中的管道化(pipeline)機制,轉而采用多路復用(Multiplexing)來支持多請求的高效傳輸。以下是幾點關鍵原因和實現方式:

管道化帶來的問題

在HTTP/1.1中,管道化可能導致隊頭阻塞(Head-of-Line Blocking),即一個請求的延遲會阻礙后續所有請求的處理。例如,如果第一個請求因為網絡問題延遲,后續請求必須等待,導致資源利用率低下。

多路復用的好處
  • 獨立流(Streams):HTTP/2將每個請求和響應分割為獨立的流,每個流都有獨特的標識符。這種機制允許在一個TCP連接上同時傳輸多個流,互不干擾。
  • 二進制分幀(Binary Framing):數據被分割為更小的二進制幀,每幀包含流標識符,確保服務器和客戶端能正確處理和組裝數據,避免阻塞。

新增優先級機制

HTTP/2允許客戶端為每個流設定優先級,服務器據此分配帶寬,確保高優先級請求優先處理,優化資源使用和用戶體驗。

總結而言,HTTP/2通過多路復用替代了管道化,利用獨立流、二進制分幀和優先級機制,顯著提升了多請求傳 輸的效率和性能,解決了HTTP/1.1中的隊頭阻塞問題。

3. 使用HPACK算法來壓縮HTTP頭部,從而減少數據傳輸量,提高傳輸效率。

具體來說,HPACK是HTTP/2協議中使用的一種高效的頭部壓縮算法,它可以減少重復的頭字段傳輸,降低數據傳輸的開銷。以下是HTTP利用HPACK壓縮頭部的主要步驟:

靜態表和動態表
  • 靜態表(Static Table):HPACK算法內置了一個靜態表,包含了一些常見的HTTP頭字段,如Content-Type、User-Agent等。這些頭字段在HTTP通信中經常出現,因此不需要每次都傳輸它們的全名。
  • 動態表(Dynamic Table):除了靜態表,HPACK還會動態維護一個表,記錄本次會話中已經傳輸過的頭字段。這樣,如果某個頭字段在之前的請求或響應中出現過,后續就可以通過索引的方式引用,而不必再次傳輸完整的頭字段。
索引編碼
  • 每個頭字段都可以通過索引的方式引用靜態表或動態表中的條目。例如,如果某個頭字段已經在動態表中存在,HTTP/2客戶端或服務器可以直接發送該條目的索引,而不是傳輸整個頭字段。
字面量編碼
  • 對于未在靜態表或動態表中出現過的頭字段,HPACK會使用字面量編碼進行傳輸。字面量編碼包括頭字段的名稱和值,但在傳輸時可以對其進行進一步壓縮。
動態表的更新
  • 傳輸新的頭字段后,這些字段會被添加到動態表中,供后續的請求或響應重復使用。動態表的大小是可以調整的,以適應不同的網絡環境。
避免壓縮膨脹
  • HPACK還通過一些機制避免了壓縮膨脹的問題(即壓縮后的數據比原始數據更大)。例如,HPACK不會對已經很小的頭字段進行壓縮,而是直接傳輸。
與HTTP/2的集成
  • HPACK是HTTP/2協議的一部分,HTTP/2使用二進制分幀機制,進一步優化了頭部的傳輸。通過HPACK壓縮后的頭部會被分割成更小的塊進行傳輸,從而減少傳輸延遲。

4. 允許服務端主動推送數據

比如說,建立連接之后,瀏覽器請求了一個 html,那服務端把這個 html 的 css 和 js 都送過去,減少了請求次數。

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

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

相關文章

完美解決瀏覽器不能復制的問題(比如賽氪網的中題庫練習題)

僅供復制題庫題目進行打印學習使用! 最近想把賽氪網題庫中的題目打印出來做練習,發現題庫中的題目不能復制,不能在試卷上勾畫標記太難受了,而且不能留作材料以后復習,故出此策。 而且CtrlP打印出的pdf會缺少題目。(我…

std::set (C++)

std::set 1. 概述定義特點 2. 內部實現3. 性能特征4. 常用 API5. 使用示例6. 自定義比較器7. 注意事項與優化8. 使用建議 1. 概述 定義 template<class Key,class Compare std::less<Key>,class Allocator std::allocator<Key> > class std::set;特點 有…

SSM省市區三級聯動和三表聯查附帶數據庫

SSM省市區三級聯動和三表聯查 ------附帶數據庫碼云地址&#xff1a;https://gitee.com/Mr_ZKC/NO1 數據庫在項目中

曲棍球·棒球1號位

中國女子曲棍球隊曾涌現過馬弋博、李紅俠等優秀選手&#xff0c;但“李紅”這一名字可能為信息誤差。以下為您系統介紹曲棍球&#xff0c;并結合棒球進行對比分析&#xff1a; 曲棍球&#xff08;Hockey&#xff09;核心特點 運動形式 分為草地曲棍球&#xff08;夏季奧運會項…

12芯束裝光纖不同包層線顏色之間的排列順序

為什么光纖線必須按照以下顏色順序進行排序&#xff1f;這其實是為了防止光污染的問題&#xff0c;不同顏色在傳遞光時從包層表皮漏光傳感到梳妝的其它纖芯上&#xff0c;會有光污染的問題&#xff0c;而為了減少并防止光污染的現象&#xff0c;所以在光通信之中&#xff0c;需…

c++程序的打包編譯cmake+make

c打包編譯 1 在不用系統中打包介紹1.1 linux中打包c程序的2種方式1.2 windows中打包c程序1.3 cmakeNinja和cmakemake的兩種方式對比1.3.1 Ninja是什么&#xff08;可以認為是make工具的一個替代產品&#xff09;1.3.2 cmakeNinja可以用于linux和windows系統中&#xff0c;編譯效…

Spark on K8s 在 vivo 大數據平臺的混部實戰與優化

一、Spark on K8s 簡介 (一)定義與架構 Spark on K8s 是一種將 Spark 運行在 Kubernetes(K8s)集群上的架構,由 K8s 直接創建 Driver 和 Executor 的 Pod 來運行 Spark 作業。其架構如下。 Driver Pod:相當于 Spark 集群中的 Driver,負責作業的調度和管理,它會根據作業…

MDA測量數據查看器【內含工具和源碼地址】

一、工具介紹 MDA測量數據查看器用于顯示和分析以MDF格式提供的測量數據。 支持MDF3.3之前含MDF3.3的二進制格式&#xff0c;支持Vector CANape and ETAS Inca. Kvaser CAN Logger (MDF 3.2) 文件。 MDF (Measurement Data Format)是一種二進制文件&#xff0c;用來記錄、交換…

番外篇 | SEAM-YOLO:引入SEAM系列注意力機制,提升遮擋小目標的檢測性能

前言:Hello大家好,我是小哥談。SEAM(Squeeze-and-Excitation Attention Module)系列注意力機制是一種高效的特征增強方法,特別適合處理遮擋和小目標檢測問題。該機制通過建模通道間關系來自適應地重新校準通道特征響應。在遮擋小目標檢測中的應用優勢包括:1)通道注意力增強…

使用VHDL語言實現TXT文件的讀寫操作

使用FPGA進行圖像處理時&#xff0c;通常需要將TXT文件中的圖像數據讀出到TestBench中&#xff0c;并將仿真的結果寫入到TXT文件中&#xff0c;用于確認圖像處理的結果是否正確。 VHDL中TXT文件的讀寫操作如下所示&#xff0c; --------------------------------------------…

基于Redis的4種延時隊列實現方式

延時隊列是一種特殊的消息隊列&#xff0c;它允許消息在指定的時間后被消費。在微服務架構、電商系統和任務調度場景中&#xff0c;延時隊列扮演著關鍵角色。例如&#xff0c;訂單超時自動取消、定時提醒、延時支付等都依賴延時隊列實現。 Redis作為高性能的內存數據庫&#x…

GN ninja 工程化構建例程

文章目錄 1. 前言?2. 工程實例??2.1 工程目錄結構2.2 工程頂層.gn文件2.3 工具鏈配置.gn文件2.4 編譯配置.gn文件2.5 編譯目標配置.gn文件2.6 工程接口文件2.7 動態庫編譯.gn文件2.8 動態庫源文件2.9 靜態庫編譯.gn文件2.10 靜態庫源文件2.11 主程序編譯.gn文件2.12 主程序源…

基于亞博K210開發板——內存卡讀寫文件

開發板 亞博K210開發板 實驗目的 本實驗主要學習 K210 通過 SPI 讀寫內存卡文件的功能 實驗準備 實驗元件 開發板自帶的 TF 卡、LCD 顯示屏 &#xff08;提前準備好 FAT32 格式的TF 卡。TF 插入 TF 卡槽的時候注意方向&#xff0c;TF 卡的金手指那一面需要面向開發板&am…

51單片機實驗五:A/D和D/A轉換

一、實驗環境與實驗器材 環境&#xff1a;Keli&#xff0c;STC-ISP燒寫軟件,Proteus. 器材&#xff1a;TX-1C單片機&#xff08;STC89C52RC&#xff09;、電腦。 二、 實驗內容及實驗步驟 1.A/D轉換 概念&#xff1a;模數轉換是將連續的模擬信號轉換為離散的數字信…

C++ 常用的智能指針

C 智能指針 一、智能指針類型概覽 C 標準庫提供以下智能指針&#xff08;需包含頭文件 <memory>&#xff09;&#xff1a; unique_ptr&#xff1a;獨占所有權&#xff0c;不可復制&#xff0c; 可移動shared_ptr&#xff1a;共享所有權&#xff0c;用于引用計數weak_pt…

6.8.最小生成樹

一.復習&#xff1a; 1.生成樹&#xff1a; 對于一個連通的無向圖&#xff0c;假設圖中有n個頂點&#xff0c;如果能找到一個符合以下要求的子圖&#xff1a; 子圖中包含圖中所有的頂點&#xff0c;同時各個頂點保持連通&#xff0c; 而且子圖的邊的數量只有n-1條&#xff0…

Spring Boot 集成金蝶 API 演示

? Spring Boot 集成金蝶 API 演示&#xff1a;登錄 / 注銷 Cookie 保存 本文將通過 Spring Boot 完整實現一套金蝶接口集成模型&#xff0c;包括&#xff1a; ? 普通登錄? AppSecret 登錄? 注銷? Cookie 保存與復用 &#x1f4c5; 項目結構 src/ ├── controller/ │…

React 受控表單綁定基礎

React 中最常見的幾個需求是&#xff1a; 渲染一組列表綁定點擊事件表單數據與組件狀態之間的綁定 受控表單綁定是理解表單交互的關鍵之一。 &#x1f4cd;什么是受控組件&#xff1f; 在 React 中&#xff0c;所謂“受控組件”&#xff0c;指的是表單元素&#xff08;如 &l…

基于FPGA的AES加解密系統verilog實現,包含testbench和開發板硬件測試

目錄 1.課題概述 2.系統測試效果 3.核心程序與模型 4.系統原理簡介 4.1 字節替換&#xff08;SubBytes&#xff09; 4.2 行移位&#xff08;ShiftRows&#xff09; 4.3 列混合&#xff08;MixColumns&#xff09; 4.4 輪密鑰加&#xff08;AddRoundKey&#xff09; 4.…