Заголовки: 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-TypeAccept-Ranges206 Partial Content416 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