Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, …, <range-startN>-<range-endN>
Range: <unit>=-<suffix-length>
Directives
<unit>
-
The unit in which ranges are defined. Currently only
bytes
are a registered unit. <range-start>
-
An integer in the given unit indicating the start position of the request range.
<range-end>
-
An integer in the given unit indicating the end position of the requested range. This value is optional and, if omitted, the end of the resource is used as the end of the range.
<suffix-length>
-
An integer indicating the number of units at the end of the resource to return.
Examples
The following examples show how to make requests using the Range
header for CORS-safelisted requests, and for requesting multiple ranges.
Other examples can be found in the CORS-safelisted request header when the value is a single byte range.
This means that it can be used in cross-origin requests without triggering a preflight request, which is useful for requesting media and resuming downloads.
The following example requests the first 500 bytes of a resource:
Range: bytes=0-499
To request the second 500 bytes:
Range: bytes=500-999
Omitting the end position requests all remaining units of the resource, so the last 100 bytes of a resource with a length of 1000 bytes can be requested using:
Range: bytes=900-
Alternatively, if it's unknown how large a resource is, the last n
bytes can be requested using a suffix range of -n
:
Range: bytes=-100
Requesting multiple ranges
Given a resource with a length of 10000 bytes, the following example requests three separate ranges; 200
-999
(800 bytes), 2000
-2499
(500 bytes), and finally 9500-
.
The ranges-specifier value 9500-
omits an end position which indicates that all bytes from 9500 onward are part of the third range (500 bytes).
Range: bytes=200-999, 2000-2499, 9500-
This example requests the first 500 and last 500 bytes of the file. The request may be rejected by the server if these ranges overlap (if the requested resource was less than 1000 bytes long, for instance).
Range: bytes=0-499, -500
Checking if a server supports range requests
The following curl command makes a HEAD
request for an image:
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
This results in the following HTTP request:
HEAD /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
User-Agent: curl/8.7.1
Accept: */*
The server responds with a 200
response, and the Accept-Ranges: bytes
header is present (some headers are omitted for brevity):
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 146515
Content-Type: image/jpeg
…
Accept-Ranges: bytes
Specifications
Specification |
---|
HTTP Semantics # field.range |
Browser compatibility
See also
If-Range
conditional request headerContent-Range
response headerContent-Type
Accept-Ranges
206 Partial Content
416 Range Not Satisfiable
- HTTP range requests guide
- CORS-safelisted request header