Transfer-Encoding header
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Der HTTP Transfer-Encoding
Anforderungs und Antwort-Header gibt die Form der Kodierung an, die zum Übertragen von Nachrichten zwischen Knoten im Netzwerk verwendet wird.
Transfer-Encoding
ist ein Hop-by-Hop-Header, der auf eine Nachricht zwischen zwei Knoten angewendet wird, nicht auf eine Ressource selbst.
Jedes Segment einer mehrknotigen Verbindung kann unterschiedliche Transfer-Encoding
-Werte verwenden.
Wenn Sie Daten über die gesamte Verbindung komprimieren möchten, verwenden Sie stattdessen den End-to-End-Content-Encoding
-Header.
In der Praxis wird dieser Header selten verwendet und in diesen Fällen fast immer mit chunked
.
Die Spezifikation gibt an, dass, wenn dieser Header in einer Nachricht vorhanden ist, er die Komprimierung angibt, die auf die Nachricht in diesem Hop angewendet wurde, und/oder ob die Nachricht in Blöcke aufgeteilt wurde.
Zum Beispiel zeigt Transfer-Encoding: gzip, chunked
an, dass der Inhalt mit der gzip-Kodierung komprimiert und dann unter Verwendung der Chunked-Kodierung in Blöcke aufgeteilt wurde, während der Nachrichtentext gebildet wurde.
Der Header ist optional in Antworten auf eine HEAD
-Anfrage, da diese Nachrichten keinen Textkörper haben und daher keine Übertragungskodierung erforderlich ist.
Wenn er vorhanden ist, gibt er den Wert an, der auf die entsprechende Antwort auf eine GET
-Nachricht angewendet worden wäre, wenn diese GET
-Anfrage keine bevorzugte Transfer-Encoding
enthalten hätte.
Warnung:
HTTP/2 verbietet alle Verwendungen des Transfer-Encoding
-Headers außer dem HTTP/2-spezifischen Wert "trailers"
.
HTTP/2 und spätere Versionen bieten effizientere Mechanismen für das Datenstreaming als Chunked-Transfer.
Die Verwendung des Headers in HTTP/2 kann wahrscheinlich zu einem spezifischen protocol error
führen.
Syntax
Transfer-Encoding: chunked
Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip
// Several values can be listed, separated by a comma
Transfer-Encoding: gzip, chunked
Direktiven
chunked
-
Daten werden in einer Serie von Blöcken gesendet. Inhalte können in Strömen unbekannter Größe gesendet werden, die als Folge von längenbeschränkten Puffern übertragen werden, sodass der Sender die Verbindung offen halten und dem Empfänger mitteilen kann, wann er die gesamte Nachricht empfangen hat. Der
Content-Length
-Header muss weggelassen werden, und am Anfang jedes Blocks zeigt eine Zeichenfolge von Hexadezimalziffern die Größe der Blockdaten in Oktetten an, gefolgt von\r\n
und dann der Block selbst, gefolgt von einem weiteren\r\n
. Der abschließende Block ist ein null-längiger Block. compress
-
Ein Format, das den Lempel-Ziv-Welch (LZW) Algorithmus verwendet. Der Wertname wurde vom UNIX-Komprimierungsprogramm compress übernommen, das diesen Algorithmus implementiert hat. Wie das Komprimierungsprogramm, das aus den meisten UNIX-Distributionen verschwunden ist, wird diese Inhaltskodierung heute von fast keinem Browser verwendet, teilweise aufgrund eines Patentproblems (das 2003 abgelaufen ist).
deflate
-
Verwendung der zlib Struktur (definiert in RFC 1950), mit dem deflate Komprimierungsalgorithmus (definiert in RFC 1951).
gzip
-
Ein Format, das die Lempel-Ziv Kodierung (LZ77) verwendet, mit einer 32-Bit-CRC. Dies ist ursprünglich das Format des UNIX-Programms gzip. Der HTTP/1.1-Standard empfiehlt zudem, dass die Server, die diese Inhaltskodierung unterstützen,
x-gzip
als Alias erkennen sollten, aus Kompatibilitätsgründen.
Beispiele
Antwort mit Chunked-Kodierung
Die Chunked-Kodierung ist nützlich, wenn größere Datenmengen an den Client gesendet werden und die Gesamtgröße der Antwort möglicherweise nicht bekannt ist, bis die Anfrage vollständig verarbeitet wurde. Zum Beispiel beim Generieren einer großen HTML-Tabelle, die aus einer Datenbankabfrage resultiert, oder beim Übertragen großer Bilder. Eine chunked-Antwort sieht so aus:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
11\r\n
Developer Network\r\n
0\r\n
\r\n
Spezifikationen
Specification |
---|
HTTP/1.1 # field.transfer-encoding |
Browser-Kompatibilität
Siehe auch
Accept-Encoding
Content-Encoding
Content-Length
- Header-Felder, die die Verwendung von Trailers regeln:
TE
(Anforderungen) undTrailer
(Antworten). - Chunked transfer encoding