借鉴学习HTTP精髓

一、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

发布了174 篇原创文章 · 获赞 115 · 访问量 83万+

猜你喜欢

转载自blog.csdn.net/nicolelili1/article/details/104305567
今日推荐