4. Transfer Codings (Übertragungskodierungen)
Transferkodierungsnamen (Transfer coding) werden verwendet, um Kodierungstransformationen anzuzeigen, die auf den Nutzlastkörper angewendet wurden, angewendet werden können oder angewendet werden müssen, um eine "sichere Übertragung" über das Netzwerk zu gewährleisten.
transfer-coding = "chunked"
/ "compress"
/ "deflate"
/ "gzip"
/ transfer-extension
transfer-extension = token *( OWS ";" OWS transfer-parameter )
transfer-parameter = token BWS "=" BWS ( token / quoted-string )
4.1. Chunked Transfer Coding (Chunked-Übertragungskodierung)
Die Chunked-Übertragungskodierung (chunked transfer coding) umhüllt den Nutzlastkörper in eine Reihe von Chunks, wobei jeder Chunk seinen eigenen Größenindikator hat, gefolgt von einem optionalen Trailer-Abschnitt, der Trailer-Felder enthält.
chunked-body = *chunk
last-chunk
trailer-part
CRLF
chunk = chunk-size [ chunk-ext ] CRLF
chunk-data CRLF
chunk-size = 1*HEXDIG
last-chunk = 1*("0") [ chunk-ext ] CRLF
chunk-data = 1*OCTET
Das chunk-size-Feld ist eine Zeichenkette aus Hexadezimalziffern, die die Größe der Chunk-Daten (in Oktetten) angibt.
Ein Empfänger MUSS in der Lage sein, die Chunked-Übertragungskodierung zu parsen und zu dekodieren.
4.1.1. Chunk Extensions (Chunk-Erweiterungen)
Die Chunked-Übertragungskodierung ermöglicht die Aufnahme von null oder mehr Chunk-Erweiterungen (chunk extensions) in jedem Chunk.
chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
chunk-ext-name = token
chunk-ext-val = token / quoted-string
4.1.2. Chunked Trailer Part (Chunked-Trailer-Teil)
Ein Trailer ermöglicht es dem Absender, zusätzliche Header-Felder am Ende einer ge chunkten Nachricht einzuschließen, um Metadaten bereitzustellen, die während des Sendens des Nachrichtenkörpers dynamisch generiert werden können.
trailer-part = *( header-field CRLF )
Ein Absender DARF NICHT ein Transfer-Encoding-, Content-Length- oder Trailer-Feld in einem Trailer generieren.
4.1.3. Decoding Chunked (Dekodieren von Chunked)
Der Prozess zum Dekodieren der Chunked-Übertragungskodierung kann wie folgt implementiert werden (unter Verwendung von Pseudocode):
length := 0
read chunk-size, chunk-ext (if any), and CRLF
while (chunk-size > 0) {
read chunk-data and CRLF
append chunk-data to decoded-body
length := length + chunk-size
read chunk-size, chunk-ext (if any), and CRLF
}
read trailer field
while (trailer field is not empty) {
if (trailer field is allowed to be sent in a trailer) {
append trailer field to existing header fields
}
read trailer-field
}
Content-Length := length
Remove "chunked" from Transfer-Encoding
4.2. Compression Codings (Kompressionskodierungen)
Die folgenden drei Kompressionskodierungsnamen sind aus Kompatibilitätsgründen mit HTTP/1.0 definiert.
4.2.1. Compress Coding (Compress-Kodierung)
Die "compress"-Kodierung ist eine adaptive Lempel-Ziv-Welch (LZW)-Kodierung [Welch], die normalerweise vom UNIX-Dateikomprimierungsprogramm "compress" erzeugt wird.
4.2.2. Deflate Coding (Deflate-Kodierung)
Die "deflate"-Kodierung ist ein "zlib"-Datenformat [RFC1950], das einen "deflate"-komprimierten Datenstrom [RFC1951] enthält, der eine Kombination aus dem Lempel-Ziv (LZ77)-Kompressionsalgorithmus und Huffman-Kodierung verwendet.
4.2.3. Gzip Coding (Gzip-Kodierung)
Die "gzip"-Kodierung ist eine LZ77-Kodierung mit einer 32-Bit-Zyklischen Redundanzprüfung (CRC), die normalerweise vom gzip-Dateikomprimierungsprogramm [RFC1952] erzeugt wird.
4.3. TE
Der TE-Header zeigt an, welche Übertragungskodierungen außer Chunked der Client bereit ist, in der Antwort zu akzeptieren, und ob der Client bereit ist, Trailer-Felder zu akzeptieren.
TE = #t-codings
t-codings = "trailers" / ( transfer-coding [ t-ranking ] )
t-ranking = OWS ";" OWS "q=" rank
rank = ( "0" [ "." 0*3DIGIT ] )
/ ( "1" [ "." 0*3("0") ] )
4.4. Trailer
Wenn der Absender weiß, welche Header-Felder im Trailer-Abschnitt des letzten Chunks gesendet werden, dann SOLLTE der Absender ein Trailer-Header-Feld senden, das eine Liste dieser Header-Feldnamen enthält.
Trailer = 1#field-name