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

时间:2020-06-17 22:44:27

标签: http

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?

3 个答案:

答案 0 :(得分:1)

<块引用>

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

RFC 7230 §4.1.1 声明:

<块引用>

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

您将难以识别任何块扩展,因为我可以分辨出没有任何定义。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

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

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