帧格式

所有的帧都以一个固定的9字节首部开始,其后紧跟一个可变长度的载荷。

 +-----------------------------------------------+
 |                 Length (24)                   |
 +---------------+---------------+---------------+
 |   Type (8)    |   Flags (8)   |
 +-+-------------+---------------+-------------------------------+
 |R|                 Stream Identifier (31)                      |
 +=+=============================================================+
 |                   Frame Payload (0...)                      ...
 +---------------------------------------------------------------+

帧首部

帧首部的字段定义如下:

  • 长度(Length):帧载荷的长度,以一个无符号24位整数表示。必须不(MUST NOT)能发送大于2^14(16,384)的值,除非接收者已经为 SETTINGS_MAX_FRAME_SIZE 设置了更大的值。

注意:9字节的帧首部不包含在这个值之内。也就是整个帧的大小是 9+length 字节。

  • 类型(Type):8位的帧类型。帧类型决定了帧的格式和语义。HTTP/2实现必须(MUST)忽略并丢弃未知类型的帧。

  • 标记(Flags):一个特定于帧类型的8位boolean标记保留字段。

标记的语义特定于指示的帧类型。一个特定帧类型中没有定义语义的标记必须(MUST)被忽略,且必须(MUST)在发送时被复位(0x0)。

  • ®:一个保留的1位字段。

这个位的语义还没有定义,而在发送时这个位必须(MUST)保持复位(0x0)状态,在接收时必须(MUST)被忽略。

  • 流标识符(Stream Identifier):流标识符被表示为一个31位无符号整型值。

保留0x0值,用于那些与整个连接关联的帧,而不是一个独立的流。