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.mzph.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.…