Range-запросы: получение части файла
Range позволяет запросить часть представления вместо полного тела. Это используется, например, при перемотке медиа и возобновлении загрузки, если сервер поддерживает подходящие диапазоны.
Назначение
Range позволяет запросить часть представления вместо полного тела. Это используется, например, при перемотке медиа и возобновлении загрузки, если сервер поддерживает подходящие диапазоны.
Как это работает
Для байтового диапазона указываются начальная и конечная позиции включительно. Успешный частичный ответ обычно имеет статус 206 и Content-Range. Сервер также может проигнорировать Range и вернуть полный ответ 200.
Пример
Запрос:
Range: bytes=0-9
Пример ответа для ресурса длиной 1000 байт:
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-9/1000
Content-Length: 10
0123456789
Что должно получиться
В примере передаются первые десять байтов. Для недопустимого диапазона возможен ответ 416. Заголовки и тело должны согласовываться; статус 206 не означает автоматическую успешность любых последующих частей.
Граница применения и частая ошибка
Не собирайте куски разных версий файла в одно содержимое. При возобновлении учитывайте валидаторы и If-Range. Сжатие и выбор представления усложняют байтовые смещения, поэтому сравнивать нужно именно передаваемую версию ресурса.
Самостоятельная проверка
На своём стенде запросите короткий диапазон небольшого файла. Проверьте статус, Content-Range и длину тела. Затем попробуйте диапазон за пределами файла и запишите фактическое поведение сервера, не предполагая обязательную поддержку.