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-Versionen
- HTTP 1.1
- HTTP 2
- HTTP 3
🧑💻Konstanten in Programmiersprachen
Ruby on Rails HTTP Status Symbol
:Partial_content
Microsoft Windows Runtime APIHttpStatusCode.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