4. Obsolete Syntax (Syntaxe obsolète)
Les versions antérieures de cette spécification permettaient une syntaxe différente (et généralement plus permissive) que celle autorisée dans cette version. De plus, certains éléments syntaxiques utilisés dans les messages n'ont jamais été explicitement documentés. Bien que certaines de ces formes syntaxiques NE DOIVENT PAS être générées selon la grammaire de la Section 3, elles DOIVENT être acceptées et analysées par un récepteur conforme. Cette section documente bon nombre de ces éléments syntaxiques. En prenant la grammaire de la Section 3 et en ajoutant les définitions présentées dans cette section, on obtient la grammaire à utiliser pour l'interprétation des messages.
Note: Cette section identifie les formes syntaxiques que toute implémentation DOIT raisonnablement interpréter. Cependant, il existe certainement des messages Internet qui ne sont même pas conformes à la syntaxe supplémentaire donnée dans cette section. Le fait qu'une forme particulière n'apparaisse dans aucune section de ce document ne justifie pas que les programmes informatiques plantent ou que les données mal formées soient perdues de manière irréversible par toute implémentation. Il incombe à l'implémentation de gérer les messages de manière robuste.
Différences clés entre syntaxe obsolète et actuelle:
-
Usage des espaces: Dans les corps de champs d'en-tête structurés, les caractères d'espace blanc (y compris les espaces blancs pliés) et les commentaires peuvent être librement insérés entre les jetons syntaxiques.
-
Règles d'espace blanc plié: La règle de la Section 3.2.2 concernant les lignes composées entièrement d'espaces blancs ne s'applique pas.
-
Caractères spéciaux: Certains caractères étaient autorisés mais ne le sont plus. Le caractère NUL (valeur ASCII 0) était autrefois autorisé mais ne l'est plus pour des raisons de compatibilité.
Concepts clés
Objectif de la syntaxe obsolète
Génération de message Analyse de message
↓ ↓
Syntaxe Section 3 Section 3 + Section 4
(Règles strictes) (Règles permissives)
↓ ↓
NE DOIT PAS générer DOIT accepter les formes
les formes obsolètes obsolètes
Exigences d'implémentation
| Rôle | Exigence pour la syntaxe obsolète |
|---|---|
| Générateurs de messages | NE DOIVENT PAS générer de syntaxe obsolète |
| Analyseurs de messages | DOIVENT accepter et analyser la syntaxe obsolète |
| Toutes les implémentations | DOIVENT gérer les messages mal formés de manière robuste |
4.1. Miscellaneous Obsolete Tokens (Jetons obsolètes divers)
obs-NO-WS-CTL = %d1-8 / ; Caractères de contrôle
%d11 / ; US-ASCII qui n'incluent pas
%d12 / ; le retour chariot, le saut
%d14-31 / ; de ligne et les caractères
%d127 ; d'espace blanc
obs-ctext = obs-NO-WS-CTL
obs-qtext = obs-NO-WS-CTL
obs-utext = %d0 / obs-NO-WS-CTL / VCHAR
obs-qp = "\" (%d0 / obs-NO-WS-CTL / LF / CR)
obs-body = *((*LF *CR *((%d0 / text) *LF *CR)) / CRLF)
obs-unstruct = *((*LF *CR *(obs-utext *LF *CR)) / FWS)
obs-phrase = word *(word / "." / CFWS)
obs-phrase-list = [phrase / CFWS] *("," [phrase / CFWS])
4.2. Obsolete Folding White Space (Espace blanc plié obsolète)
obs-FWS = 1*WSP *(CRLF 1*WSP)
4.3. Obsolete Date and Time (Date et heure obsolètes)
obs-day-of-week = [CFWS] day-name [CFWS]
obs-day = [CFWS] 1*2DIGIT [CFWS]
obs-year = [CFWS] 2*DIGIT [CFWS]
obs-hour = [CFWS] 2DIGIT [CFWS]
obs-minute = [CFWS] 2DIGIT [CFWS]
obs-second = [CFWS] 2DIGIT [CFWS]
obs-zone = "UT" / "GMT" /
"EST" / "EDT" /
"CST" / "CDT" /
"MST" / "MDT" /
"PST" / "PDT" /
%d65-73 / %d75-90 /
%d97-105 / %d107-122
Interprétation des années à 2 ou 3 chiffres:
- 00-49: Ajouter 2000
- 50-99: Ajouter 1900
- 3 chiffres: Ajouter 1900
4.4. Obsolete Addressing (Adressage obsolète)
obs-angle-addr = [CFWS] "<" obs-route addr-spec ">" [CFWS]
obs-route = obs-domain-list ":"
obs-domain-list = *(CFWS / ",") "@" domain *("," [CFWS] ["@" domain])
obs-mbox-list = *([CFWS] ",") mailbox *("," [mailbox / CFWS])
obs-addr-list = *([CFWS] ",") address *("," [address / CFWS])
obs-group-list = 1*([CFWS] ",") [CFWS]
obs-local-part = word *("." word)
obs-domain = atom *("." atom)
obs-dtext = obs-NO-WS-CTL / quoted-pair
4.5. Obsolete Header Fields (Champs d'en-tête obsolètes)
Les champs obsolètes permettent:
- Occurrences multiples
- Ordre arbitraire
- Espace blanc avant le deux-points
Résumé du Chapitre 4
Points clés
- Double rôle: NE DOIT PAS générer, DOIT analyser
- Différences: Règles plus permissives, caractères spéciaux, années à 2 chiffres
- Responsabilité: Gestion robuste des messages mal formés
Liste de contrôle de test
- Années à 2 chiffres
- Fuseaux horaires alphabétiques
- CR ou LF nus
- Adresses avec routage
- Espaces après nom de champ
- Lignes de pliage entièrement blanches
Suivant: 5. Security Considerations
Précédent: 3. Syntax