当前位置 : 主页 > 网页制作 > HTTP/TCP >

HTTP / 2 HEADERS和DATA帧

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在尝试详细了解HTTP / 2.我读了这篇关于流,消息和框架的文章: https://hpbn.co/http2/#streams-messages-and-frames.我不知道我的概念是否正确. 我得出以下结论: 消息是HEADER帧和一个或多个D
我正在尝试详细了解HTTP / 2.我读了这篇关于流,消息和框架的文章: https://hpbn.co/http2/#streams-messages-and-frames.我不知道我的概念是否正确.

我得出以下结论:

>消息是HEADER帧和一个或多个DATA的组合
帧.
> DATA帧只能与HEADERS帧一起发送,因为我没有看到任何显示DATA帧流ID的指示符(RFC 7540,6.1)

>如果是这样,则只能在消息中发送数据帧

> Stream可以分块为多个帧,而Stream可以通过Stream ID与Stream相关联

此外:规范中如何表示消息?

你有一些错误的东西.

消息是一个或两个HEADER帧(携带HTTP头),零个或多个DATA帧以及一个可选的终端HEADER帧(携带HTTP预告片)的组合.
您可以查看this section of RFC 7540中的示例.
有100个继续响应的特殊情况,可以从两个HEADERS开始,而不是一个.在下文中我们可以忽略这种情况.

DATA帧确实具有流ID,因为所有帧共享this section of RFC 7540中定义的帧头.
6.1节中描述的只是DATA帧的主体.

消息是HTTP / 2流的一半.消息表示HTTP请求或HTTP响应.

HTTP / 2流是请求消息和响应消息的组合.
注意,这不应与flag_end_stream混淆,flag_end_stream用信号通知任一对等体为该特定流发送的最后一帧.

然后,浏览器执行的典型GET请求将具有(假设流ID为13):

>一个ID = 13的HEADERS帧,flag_end_headers = true和flag_end_stream = true(GET请求通常没有正文)

对该GET请求的典型响应将具有:

>一个ID = 13且标志_end_headers = true的HEADERS帧
>一个或多个DATA帧,ID = 13;最后一个DATA帧将具有flag_end_stream = true.

注意,由于多路复用,帧可以交错;这意味着,如果您有两个并发响应(例如,对于流13和流15),您可以使用以下序列:

标题(13)标题(15)数据(15)数据(13)数据(13)数据(15)数据(15)

其中括号]表示它是流中的最后一帧.

网友评论