Résumé
- RFC 934 faisait d’une ligne commençant par un tiret une frontière possible entre messages encapsulés. Le forwarder ajoutait un tiret et une espace lorsque ce motif appartenait au texte; le burster retirait ce qu’avait ajouté l’enveloppe.
- La paire d’opérations permettait la récursion, mais non une représentation intermédiaire de taille stable : une même ligne recevait un nouveau préfixe à chaque transfert supplémentaire.
- MIME a conservé le besoin de frontières fiables tout en choisissant une valeur de frontière déclarée qui ne doit pas se trouver dans les parties. RFC 2046 explique explicitement pourquoi il renonce au bourrage de tirets de RFC 934 pour l’imbrication profonde.
Le tiret n’était spécial qu’à un endroit
Avant de séparer plusieurs messages dans un même corps, le courrier possédait déjà une grammaire. RFC 822 distingue les champs d’en-tête du corps après la première ligne vide. Dans les champs structurés, parenthèses, guillemets et barres obliques inverses ne sont pas automatiquement des données : ils ont une fonction syntaxique à l’intérieur d’un analyseur déterminé.
Cette précision est importante. Le document ne confère pas une souveraineté générale à un caractère. Il fixe les conditions dans lesquelles un lecteur donné peut le traiter comme instruction. Hors de ces conditions, le même caractère peut rester un morceau de texte. La frontière entre syntaxe et donnée est donc une frontière de compétence, non une propriété morale du symbole.
RFC 934 applique cette idée au transfert de messages. Il imagine un agent de transfert qui compose le message externe avant l’envoi, et un agent d’extraction qui le décompose après réception. Le corps externe peut comporter une introduction, des messages enfermés et une conclusion. Une « encapsulation boundary » y est, dans la convention initiale, toute ligne qui commence par .
Cette convention rend l’extraction simple. Une frontière peut fermer un message et ouvrir le suivant; deux frontières adjacentes peuvent entourer un message nul. Mais elle déplace immédiatement une question dans le texte interne. Que devient une ligne qui commence par un tiret parce que son auteur voulait réellement écrire un tiret ? Sans protection, le burster externe n’a plus les éléments nécessaires pour distinguer une donnée de son propre ordre de découpage.
Une addition qui ne prétendait pas changer l’original
RFC 934 constate que les agents existants ne traitaient apparemment pas ce cas et propose le character stuffing. Si l’agent de transfert rencontre, au début d’une ligne du message inclus, ce qui pourrait être pris pour une frontière, il émet d’abord un tiret et une espace. Ainsi, - inventaire devient - - inventaire dans le corps de l’enveloppe.
L’agent d’extraction possède la règle symétrique. Quand il lit au début d’une ligne, il ne reconnaît pas une frontière; il sort le reste de la ligne. Quand il rencontre le véritable séparateur, il termine le message courant et entre dans le suivant. RFC 934 qualifie ce dispositif de simple et dit qu’il autorise les transferts récursifs.
La valeur de la règle vient de sa modestie. L’agent externe ne réattribue pas le sens de la ligne interne. Il n’affirme ni que l’auteur a voulu une espace, ni que le tiret a disparu du contenu. Il inscrit un indice temporaire pour empêcher son propre parseur de prendre une décision à la place de l’éditeur du message. À la sortie de sa compétence, il retire cet indice.
RFC 822 propose une discipline apparentée lorsqu’il traite les transformations propres aux réseaux hétérogènes : enlever les particularités du réseau quitté afin de revenir à une forme canonique, puis imposer celles du réseau suivant. La comparaison n’est pas une identité entre les deux mécanismes. Elle montre la même exigence d’hygiène : qui modifie, à quelle frontière, selon quelle règle, et qui peut inverser la modification ?
La récursion conserve le sens, pas la taille
Le mot « récursif » peut faire croire que le problème est clos. Il ne l’est pas. Considérons la ligne interne - inventaire. Après une encapsulation RFC 934, elle devient - - inventaire. Lorsqu’un deuxième agent encapsule le message déjà encapsulé, il voit à nouveau une ligne qui commence par un tiret et ajoute sa propre protection. L’état externe devient - - - inventaire. Chaque couche sait supprimer le préfixe qu’elle a elle-même introduit; aucune ne peut supprimer honnêtement les préfixes des couches internes.
Le texte original est donc récupérable à condition que toutes les extractions aient lieu dans l’ordre. Pourtant, durant le trajet, sa longueur a changé. La réversibilité logique n’abolit pas le coût de la représentation. Les limites de ligne, les relais qui replient du texte, les normaliseurs d’espaces et les diagnostics qui ne conservent qu’une copie extérieure peuvent faire de cet état transitoire le vrai lieu de l’échec.
C’est la différence entre un test de paire et un test de système. Vérifier qu’un encodeur et son décodeur se répondent une fois prouve une propriété étroite. Cela ne prouve pas que cinq enveloppes successives restent transportables, que les caractères ajoutés sont encore visibles au dernier relais, ou qu’un opérateur peut attribuer une croissance à la bonne couche. La réalité de l’interopérabilité est faite de ces formes intermédiaires, pas seulement du texte restauré à l’arrivée.
RFC 934 ne feint d’ailleurs pas une rupture propre avec le passé. Il vise à limiter les changements imposés aux agents de transfert déjà présents. Il recommande des lignes vides autour des frontières pour conserver une compatibilité avec certains extracteurs, tout en précisant qu’un agent qui suivrait strictement le nouveau texte ne devrait pas les générer. La spécification reconnaît ainsi que le comportement déployé demeure une contrainte de conception.
MIME choisit une frontière plutôt que de réécrire chaque collision
RFC 2045 présente MIME comme issu notamment des travaux de RFC 934, de RFC 822 et de RFC 1049. MIME ne transforme pas rétroactivement tous les messages en objets typés. Il définit une syntaxe qu’un expéditeur et un lecteur peuvent adopter : entités décrites par des champs de contenu, parties de corps et structures multipartites.
Dans RFC 2046, une entité multipart déclare un paramètre boundary. Les lignes de délimitation sont construites avec deux tirets puis cette valeur. La frontière ne doit apparaître ni seule ni comme préfixe de ligne dans le contenu encapsulé; une frontière imbriquée doit être différente de celle qui l’englobe. La charge est désormais placée chez le compositeur : choisir une valeur que le contenu n’emploie pas.
Cette solution ne rend pas la frontière universelle. Elle la limite à l’entité dont l’en-tête la déclare. Des caractères identiques dans un corps en texte brut n’acquièrent aucune autorité parce qu’un regard humain les reconnaît. Le parseur doit d’abord avoir établi l’enveloppe et sa valeur de frontière.
RFC 2046 rend le jugement historique très net. Ses deux tirets gardent une compatibilité approximative avec RFC 934, mais les messages multipart ne suivent pas les conventions de citation des lignes à tiret de RFC 934. Le document donne la raison : la citation fait grandir les lignes à chaque niveau; combinée aux implémentations SMTP qui replient parfois les lignes longues, elle ne convient pas si l’on veut une structuration profondément imbriquée.
Ce passage ne rend pas RFC 934 naïf. Le vieux mécanisme résolvait localement une ambiguïté réelle avec une machine d’états très petite. MIME rencontre un objectif plus large et modifie le lieu où l’ambiguïté est payée. Au lieu de toucher chaque ligne qui ressemble à la frontière, il impose de sélectionner et déclarer une frontière absente des parties. Dans les deux cas, quelqu’un doit observer les données; aucune formule ne remplace cette responsabilité.
Rendre le pouvoir du marqueur périssable
La leçon durable n’est donc pas « échapper est mauvais » ni « MIME a tout résolu ». Elle consiste à demander quand un marqueur reçoit une autorité structurante, et quand cette autorité expire.
Dans RFC 934, l’ajout est une permission locale de ne pas confondre un texte interne avec le séparateur externe. L’extraction retire l’ajout et rend la ligne à son contexte intérieur. Dans MIME, la frontière dépend d’une déclaration dans l’en-tête de l’entité concernée et ne vaut pas hors de cette portée.
Les systèmes deviennent dangereux lorsque de tels indices temporaires survivent à leur juridiction : une forme de transit devient la copie canonique, un cache devient une identité, une règle de lecture est appliquée avant que son enveloppe soit établie, ou un mot de présentation devient une instruction exécutoire. La réponse n’est pas plus de rituel. Elle est une règle commune étroite, une validation locale, une trace du changement et un inverse utilisable.
Le tiret grandissant de RFC 934 ajoute une question concrète à toute revue de format : comment la transformation évolue-t-elle sous composition ? Qui mesure cette croissance ? Quelle limite rencontre-t-elle ? Et quelle normalisation peut encore être appliquée sans supprimer l’indice nécessaire au retour ?
Sources et limites des preuves
Le dossier clos réunit RFC 822, RFC 934, RFC 2045 et RFC 2046. Ces sources établissent les grammaires historiques, le bourrage et l’extraction, ainsi que le contraste MIME documenté. Elles ne démontrent ni l’usage universel du mécanisme, ni le comportement d’un logiciel de messagerie actuel, ni la sécurité d’un parseur particulier.
Briefing des membres
Contexte approfondi du profil
Connectez-vous avec le bon niveau d'adhésion pour débloquer le briefing complet et les notes de source.
Réservé à Strategic Circle
Strategic Circle
Ouvert à tous les lecteurs. Débloquez les briefings de profil après adhésion et connexion.
Rejoindre Strategic CircleRéservé aux membres de Leadership Alliance
Leadership Alliance
Réservé aux propriétaires et dirigeants qualifiés d'actifs IP ; connectez-vous pour débloquer les briefings Alliance.
Rejoindre Leadership Alliance
