我得出以下结论:
>消息是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)
其中括号]表示它是流中的最后一帧.