Accueil🇫🇷Chercher

Chunked transfer encoding

Chunked transfer encoding (ou Encodage de transfert en bloc[1]) est un mécanisme de transfert de données de la version 1.1 du protocole Hypertext Transfer Protocol (HTTP), qui permet à un serveur ou à un client de commencer à transmettre des données par blocs sans avoir à connaître à l'avance la taille totale des données qui seront transmises. Elle est définie dans la RFC 7230[2] - Section 4.1.

Dans le protocole HTTP, l'en-tête "Content-Length: [nombre correspondant au poids en octets du corps de message transmis]" peut remplacer la directive "Chunked transfer encoding" décrite ici.

La taille en octets de chaque bloc est envoyée, sous forme de texte en hexadecimal, juste avant le bloc lui-même afin que le serveur puisse dire au client quand il a fini de recevoir les données de ce bloc. Le transfert total d'un fichier encodé par blocs se termine par un bloc final au contenu nul.

Description

L'introduction de l'encodage de transfert en bloc du protocole HTTP 1.1 a fourni un certain nombre d'avantages :

  • Permettre Ă  un serveur de maintenir une connexion HTTP persistante pour un contenu gĂ©nĂ©rĂ© dynamiquement.
  • Permettre Ă  l'expĂ©diteur d'envoyer des en-tĂŞtes supplĂ©mentaires après le corps du message. Sans l'encodage de transfert en bloc, l'expĂ©diteur devrait tamponner le contenu jusqu'Ă  ce qu'il soit complĂ©tĂ© afin de calculer une valeur et l'envoyer avant le contenu.

Exemple

Réponse encodée

HTTP/1.1 200 OK\r\n
Content-Type: text/plain\r\n
Transfer-Encoding: chunked\r\n
\r\n
27\r\n
Voici les données du premier morceau\r\n\r\n
1C\r\n
et voici un second morceau\r\n\r\n
20\r\n
et voici deux derniers morceaux \r\n
12\r\n
sans saut de ligne\r\n
0\r\n
\r\n

Détail de l'encodage de la réponse

Les deux premiers morceaux dans l'exemple ci-dessus contiennent les caractères \r\n de sauts de lignes au format Microsoft (\n est utilisé pour le format Unix et généralement pour les protocoles TCP/IP, \r pour le format Mac). Ces derniers n'ont absolument aucune utilité au niveau du découpage des morceaux… ils font partie des données transmises.

"Voici les données du premier morceau\r\n"     (39 chars => hex: 0x27)
"et voici un second morceau\r\n"               (28 chars => hex: 0x1C)
"et voici deux derniers morceaux "             (32 chars => hex: 0x20)
"sans saut de ligne"                           (18 chars => hex: 0x12)

La réponse se termine par un morceau de longueur zéro "0\r\n" suivi par "\r\n".

Données décodées

Voici les données du premier morceau
et voici un second morceau
et voici deux derniers morceaux sans saut de ligne

Références

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.