作者:多米音乐_35782132 | 来源:互联网 | 2023-02-01 17:12
我正在尝试详细了解HTTP/2.我读了这篇关于流,消息和框架的文章:https://hpbn.co/http2/#streams-messages-and-frames.我不知道我的概念是否正确.
我得出以下结论:
消息是HEADER帧和一个或多个DATA帧的组合.
DATA帧只能与HEADERS帧一起发送,因为我没有看到任何显示DATA帧流ID的指标(RFC 7540,6.1)
如果是这样,则只能在消息中发送数据帧
Stream可以分块为多个Frame,而Stream可以通过Stream ID与Stream相关联
此外:规范中如何表示消息?
1> sbordet..:
你有一些错误的东西.
甲消息是一个或两者的组合中HEADER
的帧(携带HTTP头),零个或多个数据帧和一个可选的终端HEADER
帧(携带HTTP拖车).您可以查看RFC 7540本节中的示例.100 Continue
响应有一个特殊情况,可以从两个HEADERS
而不是一个开始.在下文中我们可以忽略这种情况.
甲DATA
帧确实有一个流ID,因为所有帧共享中定义的帧报头RFC 7540的这个部分.6.1节中描述的仅是DATA
框架的主体.
甲消息是HTTP/2流的一半.消息表示HTTP请求或HTTP响应.
HTTP/2流是请求消息和响应消息的组合.请注意,这不应与flag_end_stream
任何一个对等体发送给该特定流的最后一帧的信号相混淆.
GET
然后,浏览器执行的典型请求将具有(假设流ID为13):
一个HEADERS
帧与ID = 13,flag_end_headers=true
和flag_end_stream=true
(一个GET
请求通常具有不体)
对该GET
请求的典型响应将具有:
一HEADERS
帧ID = 13和flag_end_headers=true
一个或多个DATA
帧,ID = 13; 最后一DATA
帧将有flag_end_stream=true
.
注意,由于多路复用,帧可以交错; 这意味着,如果您有两个并发响应(例如,对于流13和流15),您可以使用以下序列:
HEADERS(13) HEADERS(15) DATA(15) DATA(13) DATA(13] DATA(15) DATA(15]
括号]
表示它是流中的最后一帧.