Вебсправочник
Основы веб-разработки

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 и длину тела. Затем попробуйте диапазон за пределами файла и запишите фактическое поведение сервера, не предполагая обязательную поддержку.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.