所有的帧都以一个固定的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)。
(R):一个保留的1位字段。
这个位的语义还没有定义,而在发送时这个位必须(MUST)保持复位(0x0)状态,在接收时必须(MUST)被忽略。
流标识符(Stream Identifier):流标识符被表示为一个31位无符号整型值。
保留0x0值,用于那些与整个连接关联的帧,而不是一个独立的流。