HTTP/2 支持块扩展吗?如果支持,如何支持?

问题描述 投票:0回答:4

RFC 7230 §4.1定义了“块扩展”,可以与使用

Transfer-Encoding: chunked
编码的 HTTP 消息中的块一起发送的附加键值对:

分块编码允许每个块在块大小之后立即包含零个或多个块扩展,以便提供每个块元数据(例如签名或哈希)、消息中间控制信息或消息随机化身体尺寸。

HTTP/2声明,

HTTP/2 旨在尽可能与 HTTP 的当前使用兼容。 这意味着,从应用的角度来看,协议的特性基本上没有改变。 为了实现这一点,所有请求和响应语义都被保留,尽管传达这些语义的语法已经改变。

在 HTTP/2 中,

DATA
帧用于以块的形式承载数据,而不是
chunked
传输编码:

HTTP/2 使用 DATA 帧来携带消息负载。 [RFC7230] 第 4.1 节中定义的“分块”传输编码不得在 HTTP/2 中使用。

但是,AFAICT,

DATA
框架不支持块扩展,仅提供可选的填充。

特别是,HTTP/1.1 到 HTTP/2 的代理如何接收包含带有格式正确的块扩展的块的请求,并将这些块转换为 HTTP/2?

http
4个回答
1
投票

https://greenbytes.de/tech/webdav/rfc7540.html#rfc.section.8.1.p.4

HTTP/2 使用 DATA 帧来携带消息负载。 [RFC7230] 第 4.1 节中定义的分块传输编码不得在 HTTP/2 中使用。

因此没有分块编码,因此没有分块扩展。


1
投票

特别是,HTTP/1.1 到 HTTP/2 的代理如何接收包含带有格式正确的块扩展的块的请求,并将这些块转换为 HTTP/2?

RFC 7230 §4.1.1 规定:

接收者必须忽略无法识别的块扩展。

您将很难识别任何块扩展,因为据我所知,还没有定义过任何扩展。

Transfer-Encoding
是逐跳标头,因此您可以合规地丢弃收到的任何块扩展并从分块数据生成
DATA
帧。


0
投票

根据 MDN,您不能将

Transfer-Encoding: chunked
与 HTTP2 一起使用:

注意:HTTP/2 不允许使用除了 HTTP/2 特定的“预告片”之外的所有 Transfer-Encoding 标头。 HTTP 2 提供了比分块传输更有效的数据流机制,并禁止使用标头。在 HTTP/2 中使用标头可能会导致特定的协议错误,因为 HTTP/2 协议禁止使用。


-1
投票

在 HTTP/2 中,DATA 帧用于以块的形式承载数据,而不是分块的传输编码

简单来说,每个DATA帧都是一个chunk。无需使用 HTTP/1.1 分块编码,因为 HTTP/2 数据帧提供相同的功能集。

© www.soinside.com 2019 - 2024. All rights reserved.