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 协议初识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值