HTTP-приложение, которое отправляет Content-Length или Transfer-Encoding с ответом 204 No Content? - PullRequest
7 голосов
/ 27 мая 2009

Я не могу сказать от RFC 2616 , должен ли клиент HTTP принимать ответ 204 Нет содержимого, который включает Content-Length: 0 или Transfer-Encoding: chunked headers. Эти заголовки, кажется, нарушают работу некоторых HTTP-клиентов и прокси, которые, по-видимому, пытаются прочитать пустое тело ответа, но спецификация читает :

  1. Любое ответное сообщение, которое "НЕ ДОЛЖНО", включает тело сообщения (например, 1xx, 204 и 304 ответов и любой ответ на запрос HEAD) всегда завершается первым пустым строка после полей заголовка, независимо от полей заголовка объекта присутствует в сообщении.

Для меня «независимо от полей заголовка объекта» подразумевает, что клиенты должны терпеть такое положение дел. HTTP-библиотека Erlang выбрала эту интерпретацию. Однако lighthttpd и IBM выбрали противоположную интерпретацию - сервер не должен включать эти заголовки для ответов, для которых запрещено иметь тела.

Так должно ли веб-приложение удалять эти заголовки из ответа, или сетевая инфраструктура и клиенты должны переносить эти заголовки на 204 Нет содержимого, 304 Не изменено и т. Д.?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2015

В соответствии с RFC7230 (см. http://tools.ietf.org/html/rfc7230#section-3.3.1) в конце страницы указано:

Сервер НЕ ДОЛЖЕН отправлять поле заголовка Transfer-Encoding в любом ответ с кодом состояния 1xx (информационный) или 204 (нет) Содержание).

Поэтому веб-приложение не должно отправлять эти заголовки с ответом.

2 голосов
/ 27 мая 2009

Я не могу сказать вам, что правильно, в том смысле, что я не знаю протокола HTTP в этой детали.

Однако вы должны спросить себя:

  1. Могу ли я изменить свое приложение, чтобы удалить эти заголовки?
  2. или я могу изменить потребителей моего приложения, чтобы игнорировать эти заголовки?

По моему мнению, приложение не должно отправлять эти заголовки в этом случае.

...