Когда возвращать 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 указано в спецификации;

Правильны ли мои предположения?

Спасибо за внимание.

0 ответов

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