Content-Range
Verwendung
Der Content-Range-Header erscheint in 206 Partial Content-Antworten, wenn ein Server eine Range-Anfrage erfüllt, indem er nur einen Teil einer Ressource ausliefert. Der Header gibt den Byte-Bereich des Teilinhalts sowie die Gesamtgröße der vollständigen Ressource an.
Range-Anfragen ermöglichen effiziente Downloads. Ein Client, dessen Übertragung einer großen Datei unterbrochen wurde, setzt an der Stelle fort, an der die Verbindung abbrach, statt von vorn zu beginnen. Medienplayer nutzen Range-Anfragen, um in Audio- oder Videodateien an bestimmte Positionen zu springen, ohne den gesamten Stream herunterzuladen.
Server kündigen die Unterstützung von Range-Anfragen über den Accept-Ranges-Header an, der üblicherweise auf bytes gesetzt ist. Fordert eine Range-Anfrage einen Byte-Bereich jenseits der Ressourcengrenze an, antwortet der Server mit 416 Range Not Satisfiable und fügt einen Content-Range-Header mit der tatsächlichen Ressourcengröße hinzu.
Die Syntax folgt einem strukturierten Format mit drei Bestandteilen: der Einheit (fast immer bytes), dem Byte-Bereich und der vollständigen Größe.
Content-Range: <unit> <range-start>-<range-end>/<size>
unit
Der Einheitentyp für den Bereich. Der Wert bytes ist die einzige breit implementierte Einheit.
range-start
Eine nullbasierte Ganzzahl, die das erste Byte des zurückgegebenen Bereichs angibt.
range-end
Eine nullbasierte Ganzzahl, die das letzte Byte des zurückgegebenen Bereichs angibt, einschließlich.
size
Die Gesamtgröße der vollständigen Ressource in Byte. Ein Sternchen (*) ersetzt die Größe, wenn die Gesamtlänge unbekannt ist, etwa bei Streaming oder dynamisch erzeugten Inhalten.
Beispiel
Ein Client setzt einen Download ab Byte 1000 einer Datei mit einer Gesamtgröße von 65.000 Byte fort. Der Server gibt die Bytes 1000 bis einschließlich 2000 zurück.
Content-Range: bytes 1000-2000/65000
Eine Streaming-Ressource liefert einen Bereich aus, ohne die Gesamtgröße zu kennen. Das Sternchen zeigt eine unbekannte Gesamtlänge an.
Content-Range: bytes 1000-2000/*
Ein Server weist eine Range-Anfrage zurück, weil die angeforderten Bytes die Ressourcengröße überschreiten. Die Antwort trägt den Status 416 Range Not Satisfiable und meldet die tatsächliche Größe.
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */50000
Eine Multipart-Range-Antwort liefert mehrere Bereiche in einer einzigen Antwort aus. Jeder Teil enthält innerhalb des multipart/byteranges-Bodys seinen eigenen Content-Range-Header.
HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=BOUNDARY
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 0-499/10000
[first 500 bytes]
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 9500-9999/10000
[last 500 bytes]
--BOUNDARY--
Hinweis
Content-Length gibt die Gesamtgröße des Nachrichten-Bodys in Byte an. Content-Range benennt, welches konkrete Byte-Segment der vollständigen Ressource die aktuelle Antwort enthält. Eine vollständige Antwort nutzt allein Content-Length; eine 206 Partial Content-Antwort nutzt beide Header gemeinsam.