HTTP Transfer-Encoding и запросы

Спецификация HTTP гласит, что заголовок Transfer-Encoding разрешен для запросов, но какой код ошибки должен ответить сервер, если он не понимает, что задано Transfer-Encoding.

Насколько я знаю, стандарт HTTP не охватывает эту возможность, но, возможно, я просто упустил это из виду.

6 ответов

Решение

Неизвестная кодировка передачи должна вызвать ошибку HTTP 501 "НЕ РЕАЛИЗОВАНО". Это то, что делает Apache, по крайней мере.

Также см. http://argray.com/unixfaq/httpd_error_codes.shtml

Изменить: указатель на соответствующий раздел RFC: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Я согласен с тем, что ответ на этот вопрос неочевиден, и он был включен в список рассылки HTTP WG.

ОБНОВЛЕНИЕ: Бьерн Х. справедливо указывает:

Раздел 3.6 RFC 2616:

Сервер, который получает тело объекта с кодировкой передачи, которую он не понимает, ДОЛЖЕН вернуть 501 (не реализовано) и закрыть
подключение.

Так что это уже решено.

В основном личное мнение.

Я всегда думал, что ошибки 5хх были фактическими ошибками программирования, как будто что-то упало. Если сервер не понимает запрос, я бы сказал, что ошибка 4xx - лучший ответ, поскольку проблема заключается в том, что запрос не является неудачным процессом на сервере. Я не уверен, какой 4xx, но есть несколько, поэтому выбор не должен быть трудным.

Запрос с недействительным Transfer-Encoding для версии HTTP искажен. Поэтому сервер должен ответить 400 Bad Request,

Возможно, непонимание кусочного кодирования должно быть 500 Внутренняя ошибка сервера, а не 501, потому что RFC-2616 говорит, что сервер ДОЛЖЕН понимать это.

Однако, если сервер решает не принимать запросы с кусочными телами и хочет обвинить клиента в этом, один из способов сделать это по закону будет 411 Требуемая длина - поскольку нельзя использовать Content-Length и Transfer-Encoding при в то же время, и это не практично, чтобы отправить запрос без так или иначе.

RFC немного неясно, но ИМХО это должно быть 406 неприемлемо.

Другие вопросы по тегам