HTTP2:基础概念

http2 相较于http2最大的改变在于用户和网站之间可以复用一条连接实现多流交互。其推出并没有改变http1.1 的基本语义。http2的目的是响应复用,头部压缩来提高极致的性能。

http2 的版本标识

  • h2:基于TLS之上构建的HTTP/2,作为ALPN的标识符,两个字节表示,0x68, 0x32,即https
  • h2c:直接在TCP之上构建的HTTP/2,缺乏安全保证,即http

HTTP2引入了的三个新概念

  • Stream: 已经建立连接的双向字节流,用唯一ID标示,可以传输一个或多个消息
  • Message:逻辑上的HTTP消息,例如请求或者响应,一个消息可以包含多个 frame
  • Frame:HTTP2通信的最小单位,二进制头封装,封装HTTP头部或body

HTTP2是把一个HTTP数据包分成多个帧发送,每个帧有一个二进制头,并把HTTP分成多个独立小帧,多个帧组成一个Message在流中发送。不同流的帧有可能交错到达,帧的报文头中标示了属于哪一个流。

在这里插入图片描述

HTTP2的最小数据单位是帧,所有帧以9字节的帧头并跟着0-16,383(可调整帧大小)字节的数据。
在这里插入图片描述

  • Length: unsigned 24-bit integer,最大值为 2^24(16384),指的是不包括头部的部分
  • Type:帧的类型
  • Flags:为帧类型保留的8字节字段有具体的布尔标识
  • R:1位的保留字段,这个比特的语义没有定义,发送时它必须被设置为 (0x0), 接收时需要忽略。
  • Stream Identifier:31字节的流标识符。
    0是保留的,标明帧是与连接相关作为一个整体而不是一个单独的流。由客户端建立的 Stream ID 必须是奇数,由服务端建立的 Stream ID 必须是偶数(如服务端主动向客户端推送消息)。
  • Frame Payload:帧主体的结构和内容完全取决于帧类型。

HTTP2 有以下十种帧类型:

Frame TypeCodeNAMEDES
DATA0x0数据帧主要用来传递消息体
HEADERS0x1头部帧主要用于传递消息头
PRIORITY0x2优先级帧用于设置流的优先级
RST_STREAM0x3流结束帧用于终止异常流
SETTINGS0x4连接配置参数帧用于设置参数
PUSH_PROMISE0x5推送承诺帧Server推送之前告知Client端
PING0x6发送端测量最小的RTT时间,检测连接是否可用
GOAWY0x7超时帧通知对端不要在连接上建新流
WINDOW_UPDATE0x8实现流量控制
CONTINUATION0x9延续帧延续一个报头区块

消息的组成: Headers 帧和DATA 帧
在这里插入图片描述

流,消息,帧 之间的关系:
在这里插入图片描述

在一条 Connection 中,不同流的数据帧可以穿插传递,但是同一条流的达到顺序必须是有序的。
例如1号流内帧必须有序。即传输中无序,接收时组装。
在这里插入图片描述

参考:
深入 HTTP2(帧,消息,流)
HTTP/2 协议(帧、消息、流简单的抓包分析)
Http2协议简介
HTTP2 协议初识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程 java锁机制

1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题&#xff…

【flink状态管理(2)各状态初始化入口】状态初始化流程详解与源码剖析

文章目录 1. 状态初始化总流程梳理2.创建StreamOperatorStateContext3. StateInitializationContext的接口设计。4. 状态初始化举例:UDF状态初始化 在TaskManager中启动Task线程后,会调用StreamTask.invoke()方法触发当前Task中算子的执行,在…

常用的前端模块化标准总结

1、模块化标准出现以前使用的模块化方案: 1)文件划分: 将不同的模块定义在不同的文件中,然后使用时通过script标签引入这些文件 缺点: 模块变量相当于是定义在全局的,容易造成变量名冲突(即不…

flink反压及解决思路和实操

1. 反压原因 反压其实就是 task 处理不过来,算子的 sub-task 需要处理的数据量 > 能够处理的数据量,比如: 当前某个 sub-task 只能处理 1w qps 的数据,但实际上到来 2w qps 的数据,但是实际只能处理 1w 条&#…

Qt信号和槽机制(什么是信号和槽,connect函数的形式,按钮的常用信号,QWidget的常用槽,自定义槽函数案例 点击按钮,输出文本)

一.什么是信号和槽 信号槽式Qt中的一个很重要的机制。信号槽实际上是观察者模式,当发生了感兴趣的事件,某一个操作就会被自动触发。当某个事件发生之后,比如按钮检测到自己被点击了一下,它就会发出一个信号。这种发出类似广播。如果有对象对…

ArcGIS学习(五)坐标系-2

3.不同基准面坐标系之间的转换 在上一关中,我们学习了ArcGIS中的投影(投影栅格)工具,并以"WGS1984地理坐标系与WGS1984的UTM投影坐标系的转换”为例进行讲解。 "WGS1984地理坐标系与WGS1984的UTM投影坐标系的转换”代表的是同一个基准面下的两个坐标的转换。 …

人工智能 | 深度学习的进展

深度学习的进展 深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展&#…

cesium mapboxgl+threebox glb 朝向问题

一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下,不设置模型的朝向 三、mapboxglthreebox在pitch和bearing都为0的情况下,不设置模型的朝向 四、对于地图默认视角,cesium设置pitch-90、heading0的时候和mapboxglthreebox设置p…

光学PCIe 6.0技术引领AI时代超大规模集群

随着云计算、大数据和人工智能技术的快速发展,超大规模数据中心正经历一场前所未有的变革。传统的集中式架构逐渐转变为解聚式(disaggregated)架构,这种架构将计算、存储和网络资源从单一的物理服务器中分离出来,形成独…

前端vite+vue3——自动化配置路由布局

文章目录 ⭐前言💖vue3系列文章 ⭐ 自动化配置路由💖引入vite版本自定义目录映射💖自动化读取文件下的路由💖main入口加载路由💖入口app.vue配置💖layout基础布局配置💖效果 ⭐总结⭐结束 ⭐前言…

text-generation-webui搭建大模型运行环境与踩坑记录

text-generation-webui搭建大模型运行环境 text-generation-webui环境初始化准备模型启动项目Bug说明降低版本启动项目 text-generation-webui text-generation-webui是一个基于Gradio的LLM Web UI开源项目,可以利用其快速搭建部署各种大模型环境。 环境初始化 下载…

【漏洞复现】EPON上行A8-C政企网关未授权下载漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品,提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关配置文件未授权下载漏洞,攻击者在未授权状态下下载配置文件,获取配置文件内敏感信息。 Nx03 产品主页 fofa-query: "Z…

Retinexformer论文精读笔记

Retinexformer论文精读笔记 论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接:browse.arxiv.org/pdf/2303.06705.pdf,代码链接:caiyuanhao1998/Retinexformer: “Retinexfo…

Mac 下载安装Java、maven并配置环境变量

下载Java8 下载地址:https://www.oracle.com/java/technologies/downloads/ 根据操作系统选择版本 没有oracle账号需要注册、激活登录 mac直接选择.dmg文件进行下载,下载后安装。 默认安装路径:/Library/Java/JavaVirtualMachines/jdk-1…

【C#】.net core 6.0 创建默认Web应用,以及默认结构讲解,适合初学者

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

SpringCloud-创建多模块项目

在微服务架构中,项目的组织结构对于代码的维护和团队的协作至关重要。Spring Cloud作为一个强大的微服务框架,提供了丰富的功能和组件,同时也支持多模块项目的创建,使得代码结构更加清晰、易于管理。本文将介绍如何使用 Spring Cl…

HTML5+CSS3+移动web——HTML 基础

目录 一、标签语法 HTML的基本框架 1. 标题标签 2. 段落标签 3. 换行和水平线 4. 文本格式化标签 5. 图像标签 6. 路径 相对路径 绝对路径 7. 超链接标签 8. 音频 9. 视频 10. 注释 二、标签结构 一、标签语法 HTML 超文本标记语言——HyperText Markup Langua…

Kubernetes基础(十四)-k8s网络通信

1 k8s网络类型 2 Pod网络 2.1 同一pod内不同容器通信 Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的所有容器都共享相同的网络命名空间和IP地址——PodIP&a…

成员对象与封闭类

1. 成员对象与封闭类 类里有其他对象则该对象叫成员对象;有成员对象的类叫 封闭类;上例中,如果CCar类不定义构造函数,则会使用默认的无参构造函数,那么下面的语句会编译出错: 因为编译器不明白CCar类中的tyre成员对象…

C语言:函数

创作不易,友友们给个三连吧!! 一、函数的概念 数学中我们见过函数的概念,例如ykxb,k和b都是常数,给任意一个x就可以得到y 而C语言也引入了函数(function)这个概念,C语…