1.Stream 特性
- 一条
TCP连接上,可以并发存在多个处于OPEN状态的Stream - 客户端或者服务器都可以创建新的
Stream - 客户端或者服务器都可以首先关闭
Stream - 同一条
Stream内的Frame帧是有序的 - 从
Stream ID的值可以轻易分辨PUSH消息 - 所有为发送
HEADER/DATA消息而创建的流,从1、3、5等递增奇数开始 - 所有为发送
PUSH消息而创建的流,从2、4、6等递增偶数开始
2.Message 特性
- 一条
HTTP Message由1个HEADER(可能含有0个或者多个持续帧构成)及0个或者多个DATA构成 HEADER消息同时包含HTTP/1.1中的start line与headers部分- 取消
HTTP/1.1中的不定长Chunk消息
3.GET 消息发送示意图
4.POST 消息发送示意图
5.Stream 流的状态
- 帧符号
H:HEADERS帧PP:PUSH_PROMISE帧ES:END_STREAM标志位R:RST_STREAM帧
- 流状态
idle:起始状态closedopen:可以发送任何帧half closed单向关闭remote:不再接收数据帧local:不能再发送数据帧reservedremotelocal
6.RST_STREAM 帧(type=0x3)
HTTP2多个流共享同一连接,RST帧允许立刻终止一个未完成的流RST_STREAM帧不使用任何flagRST_STREAM帧的格式
7.常见的 RST_STREAM 错误码
NO_ERROR(0x0):没有错误。GOAWAY帧优雅关闭连接时可以使用此错误码PROTOCOL_ERROR(0x1):检测到不识别的协议字段INTERNAL_ERROR(0x2):内部错误FLOW_CONTROL_ERROR(0x3):检测到对端没有遵守流控策略SETTINGS_TIMEOUT(0x4):某些设置帧发出后需要接收端应答,在期待时间内没有得到应答则由此错误码表示STREAM_CLOSED(0x5):当Stream已经处于半关闭状态不再接收Frame帧时,又接收了新的Frame帧FRAME_SIZE_ERROR(0x6):接收到的Frame Size不合法REFUSED_STREAM(0x7):拒绝先前的Stream流的执行CANCEL(0x8):表示Stream不再存在COMPRESSION_ERROR(0x9):对HPACK压缩算法执行失败CONNECT_ERROR(0xa):连接失败ENHANCE_YOUR_CALM(0xb):检测到对端的行为可能导致负载的持续增加,提醒对方“冷静”一点INADEQUATE_SECURITY(0xc):安全等级不够HTTP_1_1_REQUIRED(0xd):对端只能接受HTTP/1.1协议
8.Priority 优先级设置帧
- 帧类型:
type=0x2 - 不使用
flag标志位字段 Stream Dependency:依赖流Weight权重:取值范围为1到256。默认权重16- 仅针对
Stream流,若ID为0试图影响连接,则接收端必须报错 - 在
idle和closed状态下,仍然可以发送Priority帧
9.抓取权重报文






