一、HTTP 1.X
1.1 请求头、body的长度
HTTP 1.x前面24个字节是描述符,24 bytes是总的长度,头部的长度是16 bytes(可以解析为时间、packet长度和capture长度),然后可以得到body的长度(24bytes-16bytes)
1.2
下面这个请求和返回中,首先有请求头的信息,这些请求头是通过换行符来进行换行的。
请求头的长度可以通过16字节的数据值来判断,得到请求头长度后会把请求头部分一次性读取下来,然后根据换行符拆分成不同的字符串,从而获取请求头信息。
通过读取总长度、请求头长度,从而获取16bytes的body的长度
二、HTTP 2.X
2.1
HTTP 2.x会经过一系列的握手或者安全校验,然后进入应用层(Application)
HTTP 2.X与HTTP 1.X相比,有帧的概念。有助于将大的数据包拆分成小的数据包进行发送。
HTTP 1.X中,一个消息一个发送,它是一个有头部、有数据的大的消息体,而HTTP 2.X可能将请求分成单独的HEADER部分和DATA两个部分,进行单独的发送和单独的数据传输。这样有助于服务端单独进行某部分的接收或者拒绝接收某部分。
2.2 长连接
请求到接收数据的过程
首先进行请求,发送一个包含请求头的请求Message,服务端接收后,如果能响应,则会进行回复。回复消息中也包含一个Header和body部分。body是组合型body,其中包含了stream1,接下来还有stream 2......stream N。
在长连接过程中,如果有消息返回,则直接返回,如果没有,则等到有消息的时候再推送给客户端。
3、
从客户端到服务器,可以通过一个请求,根据不同的头,返回多个不同信息。实现一个socket连接,返回不同的信息,避免socket不停地创建和消耗。
4、
在HTTP 2.X中,有一个标准的9个字节的概念。
第一个字节:8个bite(0...7)
第二个字节:8个bite(8...15)
第三个字节:8个bite(16...23)
第一、二、三个字节(24个bite)表示长度,也就是最大长度是2的24次方
第四个字节:8个bite(24...31)表示type
接着用32个bite,前面是一个Flags(特殊的标志位),后面是一些数据,用来标识HTTP 2.0的唯一标识符
紧接着用40个bite,包含一个特殊标志位R和流的基本的定义,标识流的唯一标识
接下来就是数据的承载Frame Payload