Passa al contenuto principale

4. Obsolete Syntax (Sintassi obsoleta)

Le versioni precedenti di questa specifica permettevano una sintassi diversa (e solitamente più permissiva) rispetto a quella consentita in questa versione. Sebbene alcune di queste forme sintattiche NON DEBBANO essere generate secondo la grammatica nella Sezione 3, DEVONO essere accettate e analizzate da un ricevitore conforme. Questa sezione documenta molti di questi elementi sintattici.

Nota: Questa sezione identifica le forme sintattiche che qualsiasi implementazione DEVE ragionevolmente interpretare. Tuttavia, esistono certamente messaggi Internet che non sono conformi nemmeno alla sintassi aggiuntiva fornita in questa sezione. Il fatto che una particolare forma non appaia in alcuna sezione di questo documento non giustifica il crash dei programmi informatici o la perdita irreversibile di dati mal formati da parte di qualsiasi implementazione. Spetta all'implementazione gestire i messaggi in modo robusto.

Differenze chiave tra sintassi obsoleta e attuale:

  1. Uso degli spazi: All'interno dei corpi dei campi di intestazione strutturati, gli spazi bianchi e i commenti possono essere inseriti liberamente tra i token sintattici.

  2. Regole degli spazi pieghevoli: La regola nella Sezione 3.2.2 riguardante le linee composte interamente da spazi bianchi non si applica.

  3. Caratteri speciali: Alcuni caratteri erano consentiti ma non lo sono più. Il carattere NUL (valore ASCII 0) era una volta consentito ma non lo è più per ragioni di compatibilità.

Concetti chiave

Scopo della sintassi obsoleta

Generazione messaggi           Analisi messaggi
↓ ↓
Sintassi Sezione 3 Sezione 3 + Sezione 4
(Regole rigorose) (Regole permissive)
↓ ↓
NON DEVE generare DEVE accettare forme
forme obsolete obsolete

Requisiti di implementazione

RuoloRequisito per sintassi obsoleta
Generatori di messaggiNON DEVONO generare sintassi obsoleta
Parser di messaggiDEVONO accettare e analizzare sintassi obsoleta
Tutte le implementazioniDEVONO gestire messaggi malformati in modo robusto

4.1. Miscellaneous Obsolete Tokens (Token obsoleti vari)

obs-NO-WS-CTL   =   %d1-8 / %d11 / %d12 / %d14-31 / %d127
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 (Spazio bianco pieghevole obsoleto)

obs-FWS         =   1*WSP *(CRLF 1*WSP)

4.3. Obsolete Date and Time (Data e ora obsolete)

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

Interpretazione anni a 2 o 3 cifre:

  • 00-49: Aggiungere 2000
  • 50-99: Aggiungere 1900
  • 3 cifre: Aggiungere 1900

4.4. Obsolete Addressing (Indirizzamento obsoleto)

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 (Campi di intestazione obsoleti)

I campi obsoleti permettono:

  • Occorrenze multiple
  • Ordine arbitrario
  • Spazi prima dei due punti

Riepilogo Capitolo 4

Punti chiave

  1. Ruolo doppio: NON DEVE generare, DEVE analizzare
  2. Differenze: Regole più permissive, caratteri speciali, anni a 2 cifre
  3. Responsabilità: Gestione robusta di messaggi malformati

Lista di controllo test

  • Anni a 2 cifre
  • Fusi orari alfabetici
  • CR o LF nudi
  • Indirizzi con routing
  • Spazi dopo nome campo
  • Linee di piegatura interamente bianche

Successivo: 5. Security Considerations

Precedente: 3. Syntax