Является ли HTTP-приложение, которое отправляет Content-Length или Transfer-Encoding с нарушенным ответом 204 No Content?
-
06-09-2019 - |
Вопрос
Я не могу отличить от RFC 2616 должен ли HTTP-клиент принимать ответ 204 No Content, который включает Content-Length:0 или Передача-Кодирование:фрагментированные заголовки.Эти заголовки, похоже, нарушают работу некоторых HTTP-клиентов и прокси, которые, по-видимому, пытаются прочитать пустое тело ответа, но спецификация гласит:
- Любое ответное сообщение, которое "НЕ ДОЛЖНО" включать тело сообщения (например, ответы 1xx, 204 и 304 и любой ответ на запрос HEAD) всегда завершается первым пустым строка после полей заголовка, независимо от полей заголовка объекта присутствует в сообщении.
Для меня "независимо от полей заголовка объекта" подразумевает, что клиенты должны мириться с таким положением дел.В HTTP - библиотека Erlang выбрал эту интерпретацию.Однако, лайтхттпд и IBM выбрал противоположную интерпретацию - что сервер не должен включать эти заголовки для ответов, которым запрещено иметь тела.
Итак, должно ли веб-приложение удалять эти заголовки из ответа, или сетевая инфраструктура и клиенты должны терпеть эти заголовки на 204 No Content, 304 Not Modified и т.д.?
Решение
В соответствии с RFC7230 (пожалуйста, смотрите http://tools.ietf.org/html/rfc7230#section-3.3.1) в конце страницы 29 говорится:
Сервер НЕ ДОЛЖЕН отправлять поле заголовка с кодировкой передачи в любом ответе с кодом состояния 1xx (информационный) или 204 (Без Содержимого).
Поэтому веб-приложение не должно отправлять эти заголовки вместе с ответом.
Другие советы
Я не могу сказать вам, что правильно, поскольку я не знаю протокол HTTP в таких деталях.
Однако вы должны спросить себя:
- Могу ли я изменить свое приложение, чтобы удалить эти заголовки?
- или я могу изменить потребителей моего приложения, чтобы они игнорировали эти заголовки?
На мой взгляд, в этом случае приложение не должно отправлять эти заголовки.