当前位置: 首页 > news >正文

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 都送过去,减少了请求次数。

相关文章:

  • Nginx Http配置整理
  • MQTT客户端核心架构解析:clients.h源码深度解读
  • 关于Java集合中对象字段的不同排序实现方式
  • 是德科技E5080B网络分析仪深度评测:5G/车载雷达测试实战指南
  • 小程序录音授权逻辑
  • 立创·泰山派RK3566开发板调试MIPI LCD
  • 自已实现一个远程打印方案 解决小程序或APP在外面控制本地电脑打印实现
  • 停止回答 docker启动redis
  • 青少年编程与数学 02-016 Python数据结构与算法 26课题、生物信息学算法
  • XC6SLX100T-2FGG484I 赛灵思 XilinxFPGA Spartan-6
  • 抽样信号——Sa函数sinc函数
  • java聊天室案例改进(建立与数据库的连接)
  • Chrome漏洞可窃取数据并获得未经授权的访问权限
  • rac环境下,增加一个控制文件controlfile
  • 从技术本质到未来演进:全方位解读Web的过去、现在与未来
  • Git完全指南:从入门到精通版本控制 ------- Git Flow(10)
  • TDengine 语言连接器(PHP)
  • 用 MongoIndexStore 实现对话存档和恢复 实现“多用户、多对话线程”场景(像一个 ChatGPT 对话列表那样)
  • 什么是分布式锁?
  • java + spring boot + mybatis 通过时间段进行查询
  • 农行回应“病重老人被要求亲自取钱在银行去世”:全力配合公安机关调查
  • 第1现场 | 美国称将取消制裁,对叙利亚意味着什么
  • 中国创面修复学科发起者之一陆树良教授病逝,享年64岁
  • 菲律宾举行中期选举
  • 重庆三峡学院回应“85万元中标设备,网购价不到300元”:已着手解决
  • 武汉旅游体育集团有限公司原党委书记、董事长董志向被查