类型错误。网络请求通过HTTP2调用204(无内容)和304(未修改)失败(在Chrome中为ERR_HTTP2_PROTOCOL_ERROR)

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

我们已经从 HTTP1.1HTTP2 协议,并注意到一些请求失败。当服务器响应的是 204304 我们得到以下错误。

TypeError: 网络请求失败

Chrome浏览器还在网络选项卡上以如下错误显示。ERR_HTTP2_PROTOCOL_ERROR

http http2 http-1.1 http-status-code-304 http-status-code-204
1个回答
2
投票

经过一些研究,我们已经找到了问题所在。HTTP2 协议的语法比较严格,它的语法是 HTTP1.1 是。如:它不允许身体为。204304 响应。按理说,这些回应不应该包含正文,而应该包含 HTTP1.1 没有要求不通过这些 "奇怪 "的反应,而 HTTP2 要求客户不接受这样的回应。

此外,我们还发现,即使我们没有身体或。content-length 头,我们确实有一个 content-type 头部,浏览器也不接受,而在这个头部的逻辑中,浏览器也不接受 HTTP1.1 就是忽略了这个头。

我在网上根本没有找到多少关于这方面的信息。最接近的我得到的是 HTTP2 RFC但即使是这样,它在细节上也有些模糊。它没有直接指出,一个 304 响应,有一个 content-type 头应该被拒绝,但我认为这就是浏览器在现实中的实现方式。

TLDR。

204304 回复不能包含正文。content-lengthcontent-type 头。这种响应将被浏览器(可能还有其他客户端)视为网络错误。

P.S. 其他响应代码也可能有类似的限制。

P.P.S. Kudos to Morten Cools 有独创性的研究者

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