HTTPQUERY
Русский

Content-Range

Применение

Заголовок Content-Range появляется в ответах 206 Partial Content, когда сервер удовлетворяет запрос Range, передавая лишь часть ресурса. Заголовок указывает байтовый диапазон частичного содержимого и общий размер полного ресурса.

Запросы диапазонов обеспечивают эффективную загрузку. Клиент, прерванный во время передачи большого файла, возобновляет её с того места, где оборвалось соединение, вместо того чтобы начинать заново. Медиаплееры используют запросы диапазонов для перемотки к конкретной позиции в аудио- или видеофайле без скачивания всего потока.

Серверы объявляют о поддержке запросов диапазонов через заголовок Accept-Ranges, обычно со значением bytes. Когда запрос диапазона затрагивает байты за границей ресурса, сервер отвечает 416 Range Not Satisfiable и включает заголовок Content-Range с фактическим размером ресурса.

Синтаксис следует структурированному формату из трёх составляющих: единица измерения (почти всегда bytes), байтовый диапазон и полный размер.

Content-Range: <unit> <range-start>-<range-end>/<size>

unit

Тип единицы измерения для диапазона. Значение bytes — единственная широко реализованная единица.

range-start

Целое число, отсчитываемое от нуля и обозначающее первый байт возвращаемого диапазона.

range-end

Целое число, отсчитываемое от нуля и обозначающее последний байт возвращаемого диапазона (включительно).

size

Общий размер полного ресурса в байтах. Когда общая длина неизвестна — как при потоковой передаче или динамически генерируемом содержимом, — вместо размера ставится звёздочка (*).

Пример

Клиент возобновляет загрузку с байта 1000 в файле общим размером 65 000 байт. Сервер возвращает байты с 1000 по 2000 включительно.

Content-Range: bytes 1000-2000/65000

Потоковый ресурс отдаёт диапазон, не зная общего размера. Звёздочка показывает, что полная длина неизвестна.

Content-Range: bytes 1000-2000/*

Сервер отклоняет запрос диапазона, поскольку запрошенные байты выходят за размер ресурса. Ответ несёт статус 416 Range Not Satisfiable и сообщает фактический размер.

HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */50000

Многочастный ответ с диапазонами передаёт несколько диапазонов в одном ответе. Каждая часть внутри тела multipart/byteranges содержит собственный заголовок Content-Range.

HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=BOUNDARY

--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 0-499/10000

[first 500 bytes]
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 9500-9999/10000

[last 500 bytes]
--BOUNDARY--

Примечание

Content-Length указывает общий размер тела сообщения в байтах. Content-Range определяет, какой именно байтовый сегмент полного ресурса содержится в текущем ответе. Полный ответ использует только Content-Length; ответ 206 Partial Content использует оба заголовка вместе.