Range
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Der HTTP Range
Anforderungsheader gibt an, welcher Teil einer Ressource vom Server zurückgegeben werden soll.
Mehrere Teile können gleichzeitig in einem Range
-Header angefordert werden, und der Server kann diese Bereiche in einem mehrteiligen Dokument zurücksenden.
Wenn der Server Bereiche zurücksendet, verwendet er den Statuscode 206 Partial Content
für die Antwort.
Wenn die Bereiche ungültig sind, gibt der Server den Fehler 416 Range Not Satisfiable
zurück.
Ein Server, der Bereichsanforderungen nicht unterstützt, kann den Range
-Header ignorieren und die gesamte Ressource mit einem Statuscode von 200
zurückgeben.
Ältere Browser verwendeten einen Antwort-Header wie Accept-Ranges: none
, um Funktionen wie „Pause“ oder „Fortsetzen“ in Download-Managern zu deaktivieren. Aber da das Ignorieren des Range
-Headers durch einen Server dieselbe Bedeutung hat wie das Antworten mit Accept-Ranges: none
, wird der Header selten auf diese Weise verwendet.
Derzeit sind nur bytes
Einheiten registriert, die Offsets sind (nullbasiert und inklusive).
Wenn auf die angeforderten Daten eine Inhaltscodierung angewendet wurde, stellt jeder Bytebereich die codierte Bytefolge dar, nicht die Bytes, die nach dem Decodieren erhalten würden.
Der Header ist ein CORS-safelisted Anforderungsheader, wenn die Anweisung einen einzelnen Bytebereich angibt.
Header-Typ | Anforderungsheader |
---|---|
Verbotener Anforderungsheader | Nein |
Syntax
Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, …, <range-startN>-<range-endN>
Range: <unit>=-<suffix-length>
Direktiven
<unit>
-
Die Einheit, in der Bereiche definiert sind. Derzeit ist nur
bytes
eine registrierte Einheit. <range-start>
-
Eine ganze Zahl in der angegebenen Einheit, die die Startposition des Anforderungsbereichs angibt.
<range-end>
-
Eine ganze Zahl in der angegebenen Einheit, die die Endposition des angeforderten Bereichs angibt. Dieser Wert ist optional und, falls weggelassen, wird das Ende der Ressource als Endpunkt des Bereichs verwendet.
<suffix-length>
-
Eine ganze Zahl, die die Anzahl der Einheiten am Ende der Ressource angibt, die zurückgegeben werden sollen.
Beispiele
Die folgenden Beispiele zeigen, wie Anforderungen mit dem Range
-Header für CORS-safelisted Anfragen und zum Anfordern mehrerer Bereiche gestellt werden.
Weitere Beispiele finden Sie im HTTP Range-Anfragen Leitfaden.
Einzelne Bytebereiche und CORS-safelisted Anfragen
Der Range
-Header ist ein CORS-safelisted Anforderungsheader, wenn der Wert ein einzelner Bytebereich ist.
Das bedeutet, dass er in Cross-Origin-Anfragen verwendet werden kann, ohne eine Preflight Anfrage auszulösen, was nützlich ist, um Medien anzufordern und Downloads fortzusetzen.
Das folgende Beispiel fordert die ersten 500 Bytes einer Ressource an:
Range: bytes=0-499
Um die zweiten 500 Bytes anzufordern:
Range: bytes=500-999
Das Weglassen der Endposition fordert alle verbleibenden Einheiten der Ressource an, sodass die letzten 100 Bytes einer Ressource mit einer Länge von 1000 Bytes mit folgendem Beispiel angefordert werden können:
Range: bytes=900-
Alternativ, wenn unbekannt ist, wie groß eine Ressource ist, können die letzten n
Bytes mit einem Suffixbereich von -n
angefordert werden:
Range: bytes=-100
Anfordern mehrerer Bereiche
Angenommen, eine Ressource hat eine Länge von 10000 Bytes, so fordert das folgende Beispiel drei separate Bereiche an: 200
-999
(800 Bytes), 2000
-2499
(500 Bytes) und schließlich 9500-
.
Der Bereichs-Spezifikationswert 9500-
lässt eine Endposition weg, was anzeigt, dass alle Bytes von 9500 an zum dritten Bereich gehören (500 Bytes).
Range: bytes=200-999, 2000-2499, 9500-
Dieses Beispiel fordert die ersten 500 und die letzten 500 Bytes der Datei an. Der Antrag kann vom Server abgelehnt werden, wenn sich diese Bereiche überschneiden (wenn die angeforderte Ressource beispielsweise weniger als 1000 Bytes lang war).
Range: bytes=0-499, -500
Überprüfen, ob ein Server Bereichsanfragen unterstützt
Der folgende Curl-Befehl führt eine HEAD
-Anfrage für ein Bild aus:
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
Dies führt zu der folgenden HTTP-Anfrage:
HEAD /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
User-Agent: curl/8.7.1
Accept: */*
Der Server antwortet mit einer 200
Antwort, und der Accept-Ranges: bytes
Header ist vorhanden (einige Header sind der Kürze halber weggelassen):
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 146515
Content-Type: image/jpeg
…
Accept-Ranges: bytes
Spezifikationen
Specification |
---|
HTTP Semantics # field.range |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
If-Range
konditioneller AnforderungsheaderContent-Range
AntwortheaderContent-Type
Accept-Ranges
206 Partial Content
416 Range Not Satisfiable
- HTTP Range-Anfragen Leitfaden
- CORS-safelisted Anforderungsheader