Aller au contenu principal

4. Transfer Codings (Codages de Transfert)

Les noms de codage de transfert (Transfer coding) sont utilisés pour indiquer les transformations de codage qui ont été, peuvent être ou doivent être appliquées au corps de charge utile afin d'assurer un "transfert sûr" sur le réseau.

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 (Codage de Transfert par Chunks)

Le codage de transfert par chunks (chunked transfer coding) enveloppe le corps de charge utile dans une série de chunks, chacun avec son propre indicateur de taille, suivi d'une section de trailer optionnelle contenant des champs de trailer.

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

Le champ chunk-size (taille de chunk) est une chaîne de chiffres hexadécimaux indiquant la taille des données de chunk (en octets).

Un destinataire DOIT être capable d'analyser et de décoder le codage de transfert par chunks.

4.1.1. Chunk Extensions (Extensions de Chunk)

Le codage de transfert par chunks permet d'inclure zéro ou plusieurs extensions de chunk (chunk extensions) dans chaque 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 (Partie Trailer du Chunk)

Un trailer (remorque) permet à l'expéditeur d'inclure des champs d'en-tête supplémentaires à la fin d'un message par chunks afin de fournir des métadonnées qui pourraient être générées dynamiquement lors de l'envoi du corps du message.

trailer-part   = *( header-field CRLF )

Un expéditeur NE DOIT PAS générer de champ Transfer-Encoding, Content-Length ou Trailer dans un trailer.

4.1.3. Decoding Chunked (Décodage du Chunked)

Le processus de décodage du codage de transfert par chunks peut être mis en œuvre comme suit (en utilisant du pseudo-code):

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 (Codages de Compression)

Les trois noms de codage de compression suivants sont définis pour des raisons de compatibilité avec HTTP/1.0.

4.2.1. Compress Coding (Codage Compress)

Le codage "compress" est un codage adaptatif Lempel-Ziv-Welch (LZW) [Welch] généralement produit par le programme de compression de fichiers UNIX "compress".

4.2.2. Deflate Coding (Codage Deflate)

Le codage "deflate" est un format de données "zlib" [RFC1950] contenant un flux de données compressées "deflate" [RFC1951] qui utilise une combinaison de l'algorithme de compression Lempel-Ziv (LZ77) et du codage Huffman.

4.2.3. Gzip Coding (Codage Gzip)

Le codage "gzip" est un codage LZ77 avec un contrôle de redondance cyclique (CRC) de 32 bits généralement produit par le programme de compression de fichiers gzip [RFC1952].

4.3. TE

L'en-tête TE indique quels codages de transfert, autres que chunked, le client est prêt à accepter dans la réponse, et si le client est prêt à accepter des champs de trailer.

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

Si l'expéditeur sait quels champs d'en-tête seront envoyés dans la section de trailer du dernier chunk, alors l'expéditeur DEVRAIT envoyer un champ d'en-tête Trailer contenant une liste de ces noms de champs d'en-tête.

Trailer = 1#field-name