0

我们已从协议切换HTTP1.1HTTP2协议,并注意到一些请求失败。当服务器响应204304我们收到以下错误时:

TypeError:网络请求失败

Chrome 还在网络选项卡上显示以下错误:ERR_HTTP2_PROTOCOL_ERROR

4

1 回答 1

2

经过一番研究,我们发现了问题所在。HTTP2协议的语法更严格HTTP1.1。例如,它不允许正文204304响应。这些响应不应该包含正文是合乎逻辑的,但HTTP1.1不需要使这些“奇怪的”响应失败,同时HTTP2要求客户端不接受这样的响应。

我们还发现,即使我们没有正文或content-length标题,但我们确实有一个content-type浏览器也不接受的标题,而逻辑HTTP1.1只是忽略了这个标题。

我根本没有在互联网上找到太多关于此的信息。我得到的最接近的是HTTP2 RFC,甚至在细节上也有点模糊。它没有直接说明应该拒绝304具有标头的响应,但我认为这就是浏览器在现实中实现它的方式。content-type

TLDR:

204并且304响应不能包含正文content-lengthcontent-type标题。这样的响应将被浏览器(可能还有其他客户端)视为网络错误。

PS 可能其他响应码也有类似限制

PPS 向在该主题上进行了原创研究的Morten Cools表示敬意

于 2020-04-28T15:20:53.723 回答