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 Juli 2015.
Der HTTP Transfer-Encoding Anforderungs- und Antwortheader spezifiziert die Form der Kodierung, die verwendet wird, um Nachrichten zwischen Knoten im Netzwerk zu übertragen.
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 Multi-Knoten-Verbindung kann unterschiedliche Transfer-Encoding-Werte verwenden.
Wenn Sie Daten über die gesamte Verbindung hinweg komprimieren möchten, verwenden Sie stattdessen den End-to-End Content-Encoding Header.
In der Praxis wird dieser Header selten genutzt, und in diesen Fällen wird er fast immer mit chunked verwendet.
Die Spezifikation besagt jedoch, dass, wenn er in einer Nachricht vorhanden ist, er die auf die Nachricht in diesem Hop angewendete Kompression und/oder ob die Nachricht gestückelt wurde, anzeigt.
Zum Beispiel zeigt Transfer-Encoding: gzip, chunked an, dass der Inhalt unter Verwendung der Gzip-Codierung komprimiert und dann unter Verwendung der Chunked-Codierung gestückelt wurde, während der Nachrichtenkörper erstellt wurde.
Der Header ist in Antworten auf eine HEAD Anfrage optional, da diese Nachrichten keinen Körper haben und daher keine Transferkodierung benötigen.
Wenn er vorhanden ist, zeigt er den Wert an, der auf die entsprechende Antwort auf eine GET Nachricht angewendet worden wäre, falls diese GET-Anfrage keine bevorzugte Transfer-Encoding enthält.
Warnung:
HTTP/2 verbietet alle Verwendungen des Transfer-Encoding Headers.
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.
| Header-Typ | Anforderungsheader, Antwortheader, Inhaltsheader |
|---|---|
| Verbotener Anforderungsheader | Ja |
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 Reihe von Stücken gesendet. Der Inhalt kann in Streams unbekannter Größe gesendet werden, um als Sequenz von längenbegrenzten Puffern übertragen zu werden, sodass der Absender eine Verbindung offen halten kann und der Empfänger weiß, wann er die gesamte Nachricht erhalten hat. Der
Content-LengthHeader muss weggelassen werden, und am Anfang jedes Stückes zeigt eine Zeichenkette aus hexadezimalen Ziffern die Größe der Stückdaten in Oktetten an, gefolgt von\r\nund dann dem Stück selbst, gefolgt von einem weiteren\r\n. Das abschließende Stück ist ein Stück mit Länge Null. compress-
Ein Format unter Verwendung des Lempel-Ziv-Welch (LZW) Algorithmus. Der Wertname wurde von dem UNIX-Programm compress übernommen, das diesen Algorithmus implementierte. Wie das Compress-Programm, das aus den meisten UNIX-Distributionen verschwunden ist, wird diese Inhaltkodierung heute von fast keinem Browser mehr 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-Codierung (LZ77) mit einer 32-Bit CRC verwendet. Dies ist ursprünglich das Format des UNIX-Programms gzip. Der HTTP/1.1 Standard empfiehlt auch, dass die Server, die diese Inhaltkodierung unterstützen,
x-gzipals Alias erkennen sollten, aus Kompatibilitätsgründen.
Beispiele
>Antwort mit Chunked Encoding
Chunked Encoding ist nützlich, wenn größere Datenmengen an den Client gesendet werden und die Gesamtgröße der Antwort möglicherweise erst bekannt ist, wenn 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
Welcome\r\n
1c\r\n
to Mozilla Developer Network\r\n
0\r\n
\r\n
Spezifikationen
| Specification |
|---|
| HTTP/1.1> # field.transfer-encoding> |