HTTPQUERY
Русский

Range

Применение

Заголовок Range позволяет получать ресурс по частям. Клиент включает этот заголовок, чтобы запросить конкретные байтовые диапазоны вместо загрузки всего ресурса. Это необходимо для возобновления прерванных загрузок, потоковой передачи медиа с поддержкой перемотки и загрузки больших файлов параллельными сегментами.

Перед отправкой запроса с диапазоном клиент проверяет поддержку на стороне сервера по заголовку Accept-Ranges в предыдущем ответе. Значение bytes подтверждает, что сервер обрабатывает запросы байтовых диапазонов. Значение none указывает, что сервер не принимает запросы с диапазонами.

Когда запрос с диапазоном выполнен успешно, сервер отвечает 206 Partial Content и включает заголовок Content-Range, указывающий позиции байтов и общий размер ресурса. Несколько диапазонов в одном запросе дают multipart-ответ, в котором каждая часть несёт собственные заголовки Content-Range и Content-Type.

Если запрошенный диапазон выходит за границы ресурса, сервер возвращает 416 Range Not Satisfiable. В некоторых случаях сервер полностью игнорирует заголовок Range и отдаёт ресурс целиком со статусом 200.

unit

Единица измерения задаёт меру для диапазонов. bytes — стандартная единица, определённая в спецификации HTTP. Пользовательские единицы диапазонов допускаются, но используются редко.

range-start и range-end

Значение range-start — это отсчитываемое от нуля смещение в байтах, с которого начинается диапазон (обязательно). Значение range-end — отсчитываемое от нуля смещение в байтах, на котором диапазон заканчивается (необязательно). Если range-end опущен, запрашиваются все байты от range-start до конца ресурса.

suffix-length

Форма suffix-length запрашивает последние N байт ресурса. Формат -N получает последние N байт без необходимости знать общий размер ресурса.

Пример

Клиент запрашивает первые 1 000 байт большого файла изображения. Сервер отвечает 206 Partial Content и указывает байтовый диапазон и общий размер файла в заголовке Content-Range.

GET /photo.jpg HTTP/1.1
Host: cdn.example.re
Range: bytes=0-999
HTTP/1.1 206 Partial Content
Content-Type: image/jpeg
Content-Length: 1000
Content-Range: bytes 0-999/250000

Клиент возобновляет загрузку, начиная с байта 50 000. Если опустить конечное значение, запрашивается всё от указанного смещения до конца ресурса.

Range: bytes=50000-

Клиент запрашивает последние 500 байт файла. Суффиксная форма удобна, когда общий размер файла клиенту неизвестен.

Range: bytes=-500

Клиент запрашивает два отдельных байтовых диапазона в одном запросе. Сервер возвращает multipart-ответ, в котором каждый сегмент является отдельной частью тела.

Range: bytes=0-499, 1000-1499