Когда возвращать 200 или 416 в запросе с заголовком Range HTTP?
Учитывая, что сервер поддерживает запросы диапазона и он ДОЛЖЕН ответить 206 Partial Content
код состояния, если HTTP-запрос содержит хотя бы один выполнимый диапазон в пределах Range
заголовок, отправленный клиентом, я читаю RFC 7233, и у меня возникают некоторые трудности с пониманием, когда сервер должен вернуть 416 Range Not Satisfiable
ответ или 200 OK
ответ на запрос с Range
заголовок.
Например, RFC утверждает ( https://httpwg.org/specs/rfc7233.html):
Исходный сервер ДОЛЖЕН игнорировать поле заголовка Range, которое содержит единицу измерения, которую он не понимает. Прокси МОЖЕТ отбросить поле заголовка Range, которое содержит единицу измерения, которую он не понимает.
Что значит ignore
значит здесь? Означает ли это, что сервер ДОЛЖЕН вернуть 416
или просто игнорировать Range
заголовок и вернуть все представление клиенту с 200
код статуса?
Читая далее ( https://httpwg.org/specs/rfc7233.html), спецификация гласит:
Примечание. Поскольку серверы могут игнорировать Range, многие реализации просто ответят всем выбранным представлением в ответе 200 (ОК).
Я понимаю, что когда сервер игнорирует Range
заголовок, он может безопасно вернуть 200
код состояния со всем представлением, поэтому ответ на мой вопрос выше будет 200
код статуса?
Затем прочитав следующий абзац:
Код состояния 416 (Range Not Satisfiable) указывает, что ни один из диапазонов в поле заголовка Range запроса (раздел 3.1) не перекрывает текущий экстент выбранного ресурса или что запрошенный набор диапазонов был отклонен из-за недопустимых диапазонов или чрезмерного запрос малых или перекрывающихся диапазонов.
Я бы сказал, что 416
более уместно, когда все диапазоны синтаксически допустимы, но не могут быть выполнены по какой-либо причине (например, все first-byte-pos
меньше соответствующего last-byte-pos
но все они больше или равны текущей длине представления).
То есть я бы вернул 416
код состояния только тогда, когда в пределах Range
заголовок запроса, и я бы вернул 200
код состояния, когда:
По крайней мере, один синтаксически неверный
byte-range-spec
или жеsuffix-byte-range-spec
;Метод запроса не GET (
A server MUST ignore a Range header field received with a request method other than GET
, https://httpwg.org/specs/rfc7233.html);В любом другом случае, когда
ignore the Range header
указано в спецификации;
Правильны ли мои предположения?
Спасибо за внимание.