Назад | Перейти на главную страницу

Какое поведение ожидается от сервера, возвращающего Http 416

У меня есть сервер, и иногда, когда клиент запрашивает файл, и если диапазон его заголовка запроса может превышать длину файла, сервер возвращает код состояния 416. Но мне интересно, следует ли ему записывать и содержимое файла? или просто вернуть 416 без содержания?

Объяснение Веб-сайт W3 недостаточно проясняет.

Из сети W3 я понял, что он должен писать заголовок Content-Range (начиная с 0?). Итак, если длина содержимого составляет 10 байт. Ответ должен выглядеть так

HTTP/1.1 416
Content-Range: bytes 0-9/10
Content-Length: 10    

[10 bytes FILE CONTENT HERE]

В этом случае вы должны подавать 206 штук.

RFC 7233 проясняет, что если любая часть запрошенного диапазона является выполнимым, то это то, что вы отправляете обратно, даже если часть диапазона не выполняется.

Из раздела 2.1:

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

Итак, если ваш файл имеет размер 1000 байт, а клиент запрашивает байты = 501-2000, вы вернете 206 и обслужите байты 501-1000. (И помните, что диапазоны начинаются с нуля, поэтому следите за ошибками, которые расходятся с точностью до единицы.)

В случае, когда нет часть диапазона является удовлетворительной, вы отправляете ошибку 416, но не отправляете содержимое файла. Вся суть ошибки в том, что отправлять нечего!