Zum Hauptinhalt springen

2. Bereichseinheiten (Range Units)

Eine Repräsentation kann nach verschiedenen strukturellen Einheiten in Teilbereiche unterteilt werden, abhängig von der Struktur, die dem Medientyp der Repräsentation innewohnt. Diese "Bereichseinheit" (range unit) wird im Antwort-Header-Feld Accept-Ranges (Abschnitt 2.3) verwendet, um die Unterstützung von Bereichsanforderungen bekanntzugeben, im Anfrage-Header-Feld Range (Abschnitt 3.1), um die angeforderten Teile einer Repräsentation abzugrenzen, und im Nutzlast-Header-Feld Content-Range (Abschnitt 4.2), um zu beschreiben, welcher Teil einer Repräsentation übertragen wird.

range-unit = bytes-unit / other-range-unit

2.1 Byte-Bereiche (Byte Ranges)​

Da Repräsentationsdaten in Nutzlasten als Folge von Oktetten übertragen werden, ist ein Byte-Bereich eine sinnvolle Teilstruktur für jede über HTTP übertragbare Repräsentation (Abschnitt 3 von [RFC7231]). Die Bereichseinheit "bytes" ist definiert, um Teilbereiche der Oktettfolge der Daten auszudrücken.

bytes-unit = "bytes"

Eine Byte-Bereichsanforderung kann einen einzelnen Byte-Bereich oder eine Menge von Bereichen innerhalb einer einzelnen Repräsentation angeben.

byte-ranges-specifier = bytes-unit "=" byte-range-set
byte-range-set = 1#( byte-range-spec / suffix-byte-range-spec )
byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
first-byte-pos = 1*DIGIT
last-byte-pos = 1*DIGIT

Der Wert first-byte-pos in einer byte-range-spec gibt den Byte-Offset des ersten Bytes in einem Bereich an. Der Wert last-byte-pos gibt den Byte-Offset des letzten Bytes im Bereich an; das heißt, die angegebenen Byte-Positionen sind einschließlich. Byte-Offsets beginnen bei null.

Beispiele für Werte von byte-ranges-specifier:

  • Die ersten 500 Bytes (Byte-Offsets 0-499, einschließlich): bytes=0-499

  • Die zweiten 500 Bytes (Byte-Offsets 500-999, einschließlich): bytes=500-999

Eine byte-range-spec ist ungültig, wenn der Wert last-byte-pos vorhanden und kleiner als first-byte-pos ist.

Ein Client kann die Anzahl der angeforderten Bytes begrenzen, ohne die Größe der ausgewählten Repräsentation zu kennen. Wenn der Wert last-byte-pos fehlt oder wenn der Wert größer oder gleich der aktuellen Länge der Repräsentationsdaten ist, wird der Byte-Bereich als der Rest der Repräsentation interpretiert (d. h. der Server ersetzt den Wert von last-byte-pos durch einen Wert, der um eins kleiner als die aktuelle Länge der ausgewählten Repräsentation ist).

Ein Client kann mit einer suffix-byte-range-spec die letzten N Bytes der ausgewählten Repräsentation anfordern.

suffix-byte-range-spec = "-" suffix-length
suffix-length = 1*DIGIT

Wenn die ausgewählte Repräsentation kürzer als die angegebene suffix-length ist, wird die gesamte Repräsentation verwendet.

Weitere Beispiele, wobei eine Repräsentation der Länge 10000 angenommen wird:

  • Die letzten 500 Bytes (Byte-Offsets 9500-9999, einschließlich): bytes=-500 oder bytes=9500-

  • Nur das erste und das letzte Byte (Bytes 0 und 9999): bytes=0-0,-1

  • Andere gültige (aber nicht kanonische) Angaben der zweiten 500 Bytes (Byte-Offsets 500-999, einschließlich):

    bytes=500-600,601-999
    bytes=500-700,601-999

Wenn eine gültige byte-range-set mindestens eine byte-range-spec mit einem first-byte-pos enthält, der kleiner als die aktuelle Länge der Repräsentation ist, oder mindestens eine suffix-byte-range-spec mit einer suffix-length ungleich null, dann ist die byte-range-set erfüllbar (satisfiable). Andernfalls ist die byte-range-set nicht erfüllbar (unsatisfiable).

In der Byte-Bereichssyntax werden first-byte-pos, last-byte-pos und suffix-length als dezimale Anzahl von Oktetten ausgedrückt. Da es keine vordefinierte Grenze für die Länge einer Nutzlast gibt, müssen Empfänger mit potenziell großen Dezimalzahlen rechnen und Analysefehler aufgrund von Ganzzahlüberläufen verhindern (MUST).

2.2 Andere Bereichseinheiten (Other Range Units)​

Bereichseinheiten sind als erweiterbar gedacht. Neue Bereichseinheiten sollten bei IANA registriert werden, wie in Abschnitt 5.1 definiert.

other-range-unit = token

2.3 Accept-Ranges​

Das Header-Feld "Accept-Ranges" ermöglicht es einem Server anzuzeigen, dass er Bereichsanforderungen für die Zielressource unterstützt.

Accept-Ranges = acceptable-ranges
acceptable-ranges = 1#range-unit / "none"

Ein Ursprungsserver, der Byte-Bereichsanforderungen für eine gegebene Zielressource unterstützt, kann Accept-Ranges: bytes senden, um anzuzeigen, welche Bereichseinheiten unterstützt werden (MAY). Ein Client kann Bereichsanforderungen erzeugen, ohne dieses Header-Feld für die betreffende Ressource empfangen zu haben (MAY). Bereichseinheiten sind in Abschnitt 2 definiert.

Ein Server, der keinerlei Bereichsanforderungen für die Zielressource unterstützt, kann Accept-Ranges: none senden, um dem Client zu raten, keine Bereichsanforderung zu versuchen (MAY).