Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

http
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-Length Header 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\n und 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-gzip als 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
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

Browser-Kompatibilität

Siehe auch