Spec-Zone.ru › HTTP

Заголовки: Range

Заголовок Range

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна в браузерах с июля 2015 года.

  • Подробнее
  • Полная таблица совместимости
>

HTTP-заголовок Range запроса указывает часть ресурса, которую должен вернуть сервер. В одном заголовке Range можно запросить несколько частей одновременно, и сервер может отправить эти диапазоны в документе с несколькими частями. Если сервер отправляет диапазоны, он использует для ответа код состояния 206 Partial Content. Если диапазоны недопустимы, сервер возвращает ошибку 416 Range Not Satisfiable.

Сервер, не поддерживающий запросы диапазонов, может проигнорировать заголовок Range и вернуть весь ресурс с кодом состояния 200. Раньше браузеры использовали заголовок ответа Accept-Ranges: none, чтобы отключать такие функции, как «пауза» или «возобновление» в менеджерах загрузок. Однако сервер, игнорирующий заголовок Range, ведёт себя так же, как сервер, ответивший Accept-Ranges: none, поэтому заголовок редко используется таким образом.

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

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

Тип заголовка Заголовок запроса
Запрещённый заголовок запроса Нет

Синтаксис

Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, …, <range-startN>-<range-endN>
Range: <unit>=-<suffix-length>

Директивы

<unit>

Единица, в которой задаются диапазоны. В настоящее время зарегистрированной единицей является только bytes.

<range-start>

Целое число в заданной единице, указывающее начальную позицию запрашиваемого диапазона.

<range-end>

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

<suffix-length>

Целое число, указывающее количество единиц в конце ресурса, которые нужно вернуть.

Примеры

В следующих примерах показано, как выполнять запросы с помощью заголовка Range для запросов, разрешённых для CORS, а также как запрашивать несколько диапазонов. Другие примеры приведены в руководстве Запросы диапазонов HTTP.

Одиночные диапазоны байтов и запросы, разрешённые для CORS

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

В следующем примере запрашиваются первые 500 байтов ресурса:

Range: bytes=0-499

Чтобы запросить следующие 500 байтов:

Range: bytes=500-999

Если не указывать конечную позицию, запрашиваются все оставшиеся единицы ресурса. Поэтому последние 100 байтов ресурса длиной 1000 байтов можно запросить так:

Range: bytes=900-

Если же размер ресурса неизвестен, последние n байтов можно запросить с помощью суффиксного диапазона -n:

Range: bytes=-100

Запрос нескольких диапазонов

Для ресурса длиной 10000 байтов в следующем примере запрашиваются три отдельных диапазона: 200-999 (800 байтов), 2000-2499 (500 байтов) и, наконец, 9500-. Значение спецификатора диапазона 9500- не содержит конечную позицию, что означает: все байты начиная с 9500 входят в третий диапазон (500 байтов).

Range: bytes=200-999, 2000-2499, 9500-

В этом примере запрашиваются первые и последние 500 байтов файла. Сервер может отклонить запрос, если диапазоны перекрываются (например, если запрашиваемый ресурс короче 1000 байтов).

Range: bytes=0-499, -500

Проверка поддержки запросов диапазонов сервером

Следующая команда curl выполняет запрос HEAD для изображения:

curl -v --http1.1 -I https://i.imgur.com/z4d4kWk.jpg
# or using the OPTIONS method:
# curl -v --http1.1 -X OPTIONS https://i.imgur.com/z4d4kWk.jpg

В результате отправляется следующий HTTP-запрос:

HEAD /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
User-Agent: curl/8.7.1
Accept: */*

Сервер отвечает 200, при этом присутствует заголовок Accept-Ranges: bytes (для краткости некоторые заголовки опущены):

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 146515
Content-Type: image/jpeg
…
Accept-Ranges: bytes

Получение диапазона по URL blob

URL blob: также поддерживает запросы диапазонов с помощью fetch().

const blob = new Blob(["Hello, world!"], { type: "text/plain" });
const url = URL.createObjectURL(blob);
fetch(url, {
  headers: {
    Range: "bytes=7-11",
  },
})
  .then((response) => response.text())
  .then((text) => console.log(text)); // "world"

Спецификации

Спецификация
Семантика HTTP>
# field.range>

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS
Range 1 12 1 15 1 18 4 14 1 1.0 4.4 1
cors_safe 99 99 117 85 16 99 117 68 16 18.0 99 16

См. также

  • If-Range условный заголовок запроса
  • Content-Range заголовок ответа
  • Content-Type
  • Accept-Ranges
  • 206 Partial Content
  • 416 Range Not Satisfiable
  • Руководство по запросам диапазонов HTTP
  • Заголовок запроса, разрешённый для CORS

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API