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

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.xdnf.cn/news/65.html

相关文章:

  • LeetCode每日一题4.17
  • C#日志辅助类(Log4Net)实现
  • Python学习笔记
  • jenkins凭据管理(配置github密钥)
  • ssh用户秘钥登录设置
  • ReadableStream响应主体数据处理(截图自用)
  • 第七章:7.2求方程a*x*x+b*x+c=0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值
  • 聊一聊接口测试是如何进行的?
  • 16位海明码解码电路设计教程
  • 压缩包网页预览(zip-html-preview)
  • java IO/NIO/AIO
  • 【音视频】MP4解封装
  • 23种设计模式-创建型模式之单例模式(Java版本)
  • CS144 Lab1实战记录:实现TCP重组器
  • Vue中v-if和v-show区别
  • Redis之全局唯一ID
  • Python解决“小D的abc字符变换”问题
  • 进程(Process)和进程管理
  • 十三种物联网/通信模块综合对比——《数据手册--物联网/通信模块》
  • HarmonyOS
  • 安全可靠+操作简捷——安科瑞预付费电表的用户体验升级
  • 代码随想录算法训练营第三十七天| 52. 携带研究材料 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶版)
  • Dell戴尔服务器 PowerEdge R750xs + window server2012r2 || 2016
  • B端网站建设,怎样平衡功能与美观,满足企业多元需求?
  • 【Kubernetes基础--Service深入理解】--查阅笔记4
  • 通过gird布局实现div的响应式分布排列
  • 【Linux】第十章 配置和保护SSH
  • Android Mainline简介
  • Doris的向量化执行如何支撑分布式架构和复杂查询
  • ShenNiusModularity项目源码学习(18:ShenNius.Admin.Mvc项目分析-3)