HTTP/2 帧

92 阅读1分钟

在HTTP/2中,帧是二进制数据的基本单位,每个帧都有一个前缀,包含帧长度和类型信息,以及可选的flags和reserved bits。

为了判断一个帧的起始和结束,你需要根据HTTP/2协议的帧结构来解析二进制数据。 每个帧的起始包含了长度和类型字段,长度表示该帧的数据部分长度(不包含前缀),类型字段则表明了帧的类型(例如,HEADERS,DATA,SETTINGS)。

帧的基本结构:

  • 长度(Length):一个24位无符号整数,表示帧负载的长度(不包括帧头的9个字节)。
  • 类型(Type):一个8位字段,表示帧的类型(例如,HEADERS,DATA)
  • 标志(Flags):一个8位字段,用于控制帧的某些特性。
  • 保留位(Reserved):一个1位字段,必须设置为0.
  • 流标识符(Stream Identifier):一个31位字段,用于标识帧所属的流。

帧负载(payload)随后紧跟在帧头之后,其长度由长度字段确定。 要判断一个帧的起始和结束,你需要按照以下步骤操作:

  1. 读取长度字段:首先,从数据流中读取前3个字节(24位),这表示接下来的帧负载的长度。
  2. 确定帧的起始:帧的起始就是长度字段的开始位置。
  3. 确定帧的结束:帧的结束就是长度字段所指示的负载长度加上帧头的长度(9个字节)。

若长度为n,帧的负载就是n个字节,帧的结束位置就是长度字段后的第n+9