206 Partial Content

Die Anfrage war erfolgreich und der angeforderte Teil einer Ressource wird übertragen.

Bedeutung

Der Server beginnt das vom Client angeforderte Teilstück einer Resource zu übertragen. Dies geschieht insbesondere als Antwort auf Anfragen mit Content-Range Anfragekopfzeile oder Content-Type: multipart/byteranges.

206 Partial Content wird auch für wiederaufgenommene/fortgesetzte Downloads verwendet.

Spezifikation von 206 Partial Content

Der 206 Partial Content HTTP Status Code zeigt an, dass der Server erfolgreich eine Range Anfrage für die Zielressource beantwortet, indem ein oder mehr Teile der ausgewählten Repräsentation übertragen werden. Diese Teile korrespondieren mit den erfüllbaren Bereichen (Ranges) überein, die in der Range-Anfragekopfzeile vorgefunden wurden.

Wenn ein einzelner Teil übertragen wird, dann muss der Server, der die 206 Partial Content Antwort erzeugt, auch eine Content-Range Antwortkopfzeile setzen, die beschreibt, welcher Bereich (Range) der ausgewählten Repräsentation verschickt wird, sowie eine entsprechende Nutzlast, die diesen Bereich enthält.

Beispiel:

HTTP/1.1 206 Partial Content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT 
Content-Range: bytes 21010-47021/47022 
Content-Length: 26012 
Content-Type: image/gif

 ... 26012 Bytes von Teildaten des Bildes ...

Wenn mehrere Teile übertragen werden muss der Server der die 206 Partial Content Antwort erzeugt auch eine „multipart/byteranges“ Nutzlast erzeugen, sowie eine Content-Type Antwortkopfzeile mit dem Medientyp multipart/byteranges und dem benötigten Grenzparameter (boundary). Um eine Verwechslung mit einteiligen Antworten zu vermeiden, darf der Server keine Content-Range Antwortkopfzeile in einer mehrteiligen Antwort erzeugen. Stattdessen wird diese für jeden Teil einzeln gesendet.

Innerhalb des Kopfbereichs von jedem Teil einer mehrteiligen Nutzlast muss der Server entsprechend eine Content-Range Antwortkopfzeile für den Bereich, den dieses Teilstück enthält, erzeugen. Wenn die gewählte Repräsentation einen Content-Type Eintrag in einer 200 OK Antwort gehabt hätte, so soll der Server den gleichen Content-Type Eintrag für jedes Teilstück erzeugen.

Beispiel

HTTP/1.1 206 Partial Content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-Length: 1741
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES

--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 500-999/8000

...the first range...
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 7000-7999/8000
...the second range
--THIS_STRING_SEPARATES--

Wenn mehrere Bereiche (Ranges) angefragt werden darf ein Server Bereiche zusammenführen, die sich überlappen oder die durch eine Lücke getrennt sind, welche kleiner ist als der Mehraufwand für das senden von mehreren Teilen – ungeachtet der Reihenfolge in der die zugehörigen Anfragen bzgl. der Bereiche (Ranges) in der ursprünglichen Range Anfragekopfzeile auftauchten. Da der typische Mehraufwand zwischen teilen einer multipart/byteranges Nutzlast ungefähr 80 Bytes beträgt – in Abhängigkeit davon, welcher Medientyp für die ausgewählte Repräsentation genutzt wird und der Länge für den ausgewählten Grenzparameter – kann es weniger effizient sein, viele kleine von einander getrennte Teile zu transferieren als einfach die gesamte gewählte Repräsentation.

Ein Server darf keine mehrteilige Antwort für eine Anfrage erzeugen, die nur ein Teilstück enthält, da ein Client der nicht auch mehrteilige Anfragen schickt eventuell keine mehrteiligen Antworten unterstützen kann. Dagegen darf ein Server multipart/byteranges Nutzlasten erzeugen mit nur einem einzelnen Teilstück, wenn mehrere Bereiche (Ranges) angefragt wurden und nur ein einzelner Bereich erfüllt werden konnte oder alle Bereiche zu einem gesamten Stück verschmolzen wurden. Ein Client, der nicht auch eine multipart/byteranges Antwort verarbeiten kann darf auch keine Anfrage erzeugen, die mehrere Teilstücke anfragt.

Wenn eine mehrteilige Nutzlast erzeugt wird, dann sollte der Server auch die Teilstücke in der gleichen Reihenfolge schicken, in der die Bereiche in der Range Kopfzeile der Anfrage aufgetaucht sind – ausgenommen die Bereiche, die nicht erfüllbar waren oder die mit anderen Bereichen verschmolzen wurden. Ein Client, der mehrteilige Antworten erhält, muss die Content-Range Antwortkopfzeilen in jedem Teilstück untersuchen, um herauszufinden, welcher Bereich in dem gesendeten Teilstück enthalten ist; ein Client kann sich nicht darauf verlassen, dass er die selben Bereiche erhält, die er angefragt hatte oder dass diese in der gleichen Reihenfolge zurückgegeben werden.

Wenn eine 206 Partial Content Antwort erzeugt wird, dann muss der Server die folgenden Antwortkopfzeilen zusätzlich zu den oben angegebenen erzeugen, wenn die Antwortkopfzeile auch in einer 200 OK Antwort auf die gleiche Anfrage gesetzt worden wäre: Date, Cache-Control, ETag, Expires, Content-Location, and Vary.

Wenn eine 206 Partial Content Antwort erzeugt wurde als Resultat für eine Anfrage mit If-Range Anfragekopfzeile, dann sollte der Server keine anderen Antwortkopfzeilen erzeugen, die über die oben geschilderten hinausgehen, da davon ausgegangen wird, dass der Client bereits eine vorherige Antwort erhalten hat, die diese Zeilen enthielt. Andernfalls muss der Server alle der Antwortkopfzeilen der Repräsentation erzeugen, die auch in einer 200 OK Antwort auf die gleiche Anfrage gesetzt worden wären.

Spezifiziert wird 206 Partial Content durch Abschnitt 4.1. von RFC7233

Ausprobieren

🔧 Erzeuge eine Antwort mit dem HTTP Status Code 206

🔦 Checke den Status Code, die Anwort-Kopfzeilen und Weiterleitungsketten einer URL

Unterhaltsames

🐈 HTTP-Katze zu 206

🐩 HTTP Status Hund zu 206

HTTP-Versionen

  • HTTP 1.1
  • HTTP 2
  • HTTP 3

🧑‍💻Konstanten in Programmiersprachen

Ruby on Rails HTTP Status Symbol
 :Partial_content

Microsoft Windows Runtime API
HttpStatusCode.PartialContent

Go HTTP Status Constant
 http.StatusPartialContent

Symfony HTTP Status Constant
 Response::HTTP_PARTIAL_CONTENT

Python2 HTTP Status Constant
 httplib.HTTP_PARTIAL_CONTENT

Python3+ HTTP Status Constant
 http.client.HTTP_PARTIAL_CONTENT

Python3.5+ HTTP Status Constant
 http.HTTPStatus.HTTP_PARTIAL_CONTENT