我正在尝试详细了解HTTP/2.我读了这篇关于流,消息和框架的文章:https://hpbn.co/http2/#streams-messages-and-frames.我不知道我的概念是否正确.
我得出以下结论:
此外:规范中如何表示消息?
你有一些错误的东西.
甲消息是一个或两者的组合中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=trueDATA帧,ID = 13; 最后一DATA帧将有flag_end_stream=true.注意,由于多路复用,帧可以交错; 这意味着,如果您有两个并发响应(例如,对于流13和流15),您可以使用以下序列:
HEADERS(13) HEADERS(15) DATA(15) DATA(13) DATA(13] DATA(15) DATA(15]
括号]表示它是流中的最后一帧.