Ошибка типа: сбой сетевого запроса для вызова 204 (без содержимого) и вызова 304 (без изменений) по HTTP2 (ERR_HTTP2_PROTOCOL_ERROR в Chrome) - PullRequest
0 голосов
/ 28 апреля 2020

Мы переключились с протокола HTTP1.1 на HTTP2 и заметили, что некоторые запросы не выполняются. Когда сервер отвечает 204 или 304, мы получаем следующую ошибку:

TypeError: сбой сетевого запроса

Chrome дополнительно показывает его со следующим ошибка на вкладке сети: ERR_HTTP2_PROTOCOL_ERROR

1 Ответ

2 голосов
/ 28 апреля 2020

После некоторых исследований мы выяснили, в чем проблема. Протокол HTTP2 более строг в своем синтаксисе, чем HTTP1.1. Например, он не допускает тело для ответов 204 или 304. Логично, что эти ответы не должны содержать тела, но HTTP1.1 не требовал сбоя этих "странных" ответов, в то время как HTTP2 требует, чтобы клиент не принимал такой ответ.

Мы также нашли из-за того, что, хотя у нас не было тела или content-length заголовка, у нас был заголовок content-type, который браузер также не принимает, в то время как logi c для HTTP1.1 просто игнорировал этот заголовок.

Я не нашел много информации об этом на Inte rnet вообще. Самым близким был HTTP2 RF C, и даже он был немного расплывчатым в деталях. В нем прямо не говорится, что ответ 304 с заголовком content-type должен быть отклонен, но я предполагаю, что именно так браузеры реализовали его в реальности.

TLDR: * 1022 Ответы *

204 и 304 не могут содержать тело, заголовок content-length или content-type. Такие ответы будут рассматриваться браузером (и, возможно, другими клиентами) как сетевая ошибка.

PS Вероятно, существуют аналогичные ограничения для других кодов ответов

PPS Престижность Мортен Кулс , который провел оригинальное исследование топи c

...