Range
Verwendung
Der Range-Header ermöglicht den teilweisen Abruf einer Ressource. Ein Client fügt diesen Header hinzu, um bestimmte Byte-Bereiche anzufordern, statt die gesamte Ressource herunterzuladen. Das ist unverzichtbar für das Fortsetzen abgebrochener Downloads, für Streaming-Medien mit Sprungfunktion und für das parallele Laden großer Dateien in Segmenten.
Bevor ein Client eine Range-Anfrage sendet, prüft er die Serverunterstützung anhand des Accept-Ranges-Headers in einer vorangegangenen Antwort. Der Wert bytes bestätigt, dass der Server Byte-Range-Anfragen verarbeitet. Der Wert none zeigt an, dass der Server keine Range-Anfragen akzeptiert.
Ist eine Range-Anfrage erfolgreich, antwortet der Server mit 206 Partial Content und fügt den Content-Range-Header hinzu, der die Bytepositionen und die Gesamtgröße der Ressource angibt. Mehrere Bereiche in einer einzelnen Anfrage ergeben eine Multipart-Antwort, bei der jeder Teil eigene Content-Range- und Content-Type-Header trägt.
Liegt der angeforderte Bereich außerhalb der Grenzen der Ressource, gibt der Server 416 Range Not Satisfiable zurück. In manchen Fällen ignoriert der Server den Range-Header vollständig und liefert die gesamte Ressource mit dem Status 200 aus.
unit
Die unit gibt die Maßeinheit für Bereiche an. bytes ist die in der HTTP-Spezifikation definierte Standardeinheit. Eigene Bereichseinheiten sind zulässig, werden aber selten verwendet.
range-start und range-end
Der Wert range-start ist der nullbasierte Byte-Offset, an dem der Bereich beginnt (erforderlich). Der Wert range-end ist der nullbasierte Byte-Offset, an dem der Bereich endet (optional). Wird range-end weggelassen, werden alle Bytes von range-start bis zum Ende der Ressource angefordert.
suffix-length
Die Form suffix-length fordert die letzten N Bytes einer Ressource an. Das Format -N ruft die abschließenden N Bytes ab, ohne dass die Gesamtgröße der Ressource bekannt sein muss.
Beispiel
Ein Client fordert die ersten 1.000 Bytes einer großen Bilddatei an. Der Server antwortet mit 206 Partial Content und gibt den Byte-Bereich sowie die Gesamtdateigröße im Content-Range-Header an.
GET /photo.jpg HTTP/1.1
Host: cdn.example.re
Range: bytes=0-999
HTTP/1.1 206 Partial Content
Content-Type: image/jpeg
Content-Length: 1000
Content-Range: bytes 0-999/250000
Ein Client setzt einen Download ab Byte 50.000 fort. Das Weglassen des Endwerts fordert alles vom angegebenen Offset bis zum Ende der Ressource an.
Range: bytes=50000-
Ein Client fordert die letzten 500 Bytes einer Datei an. Die Suffix-Form ist nützlich, wenn dem Client die Gesamtdateigröße unbekannt ist.
Range: bytes=-500
Ein Client fordert zwei getrennte Byte-Bereiche in einer einzigen Anfrage an. Der Server gibt eine Multipart-Antwort zurück, in der jedes Segment ein eigener Body-Teil ist.
Range: bytes=0-499, 1000-1499