Vyšlo v týdeníku Computerworld č. 35/94 v roce 1994
Vytištěno z adresy: http://www.earchiv.cz/a94/a435c110.php3

RFC 822

V minulých dílech tohoto seriálu jsme se seznámili s obecnými principy elektronické pošty a začali jsme se zabývat tím, jak konkrétně bývá realizována v sítích na bázi protokolů TCP/IP. V minulém dílu jsme dospěli k představě toho, jaký je současný stav v této oblasti a jaké protokoly, resp. standardy a doporučení se používají v jednotlivých částech systémů elektronické pošty. Dnes se již dostaneme podrobněji k doporučení RFC822, které definuje formát přenášených zpráv.

Nejprve si ale připomeňme samotný statut dokumentu označovaného jako RFC822 - jak jsme si již uvedli v předchozích dílech, dokumenty RFC (Request For Comment) jsou základními technickými dokumenty, které se zabývají nejrůznějšími aspekty fungování Internetu, včetně protokolů TCP/IP. Nemají formu právně závazných norem (proto je asi namístě označovat je spíše jako doporučení). Některé z nich - zvláště ty, které definují různé protokoly - však mají povahu skutečných a závazných standardů, protože jak v rámci Internetu, tak i mimo něj (a to i v komerční sféře) jsou všeobecně uznávány, respektovány a důsledně dodržovány. Dokument RFC822 je právě jedním z takovýchto dokumentů, které mají "sílu" závazného standardu.

Čeho se RFC822 týká?

Již v minulém dílu jsme si naznačili, že při přenosu jednotlivých zpráv elektronické pošty mezi přenosovými složkami je třeba uvažovat jak konkrétní mechanismus, kterým si tyto složky zprávy předávají, tak i samotný vnitřní formát těchto zpráv (kterému zmíněné přenosové složky musí rozumět alespoň do té míry, aby dokázaly poznat, komu a kam mají zprávy poslat).

Nejlépe je vyjít z představy, že každá jednotlivá zpráva má povahu listu papíru a je přenášena v obálce. Na samotném listu papíru je jak vlastní obsah zprávy (tzv. tělo), tak i její hlavička, určující mj. odesilatele a konečného adresáta a obsahující i další údaje, se kterými se ještě dnes seznámíme. Tento list papíru přitom vyplňuje tzv. uživatelská složka, resp. program, jehož prostřednictvím uživatel sestavuje své zprávy. Když tato uživatelská složka (User Agent) předá připravenou zprávu (list papíru) přenosové složce ke skutečnému odeslání, ta vloží list do obálky a na ni nadepíše takové údaje, jaké jsou zapotřebí pro přenos obálky (načež zajistí její skutečný přenos). Při sestavování těchto údajů přitom přenosová složka vychází z toho, co je napsáno na listu papíru, přesněji v hlavičce zprávy (konkrétně z údajů o odesilateli a příjemci atd.). Sama proto musí rozumět formátu, podle kterého je zpráva sestavena, resp. vyplněn náš hypotetický list papíru. A právě tento formát je předmětem doporučení RFC822, zatímco nápisy na pomyslné obálce a její vlastní přenos se řídí protokolem SMTP (který je sám definován v doporučení RFC821). Doporučení RFC822 také nedefinuje způsob komunikace mezi tím, kdo zprávu sestavuje (uživatelskou složkou), a tím, kdo ji skutečně odesílá (přenosovou složkou). Dokonce ani nepředepisuje, jakým způsobem má přenosová složka jednotlivé zprávy uchovávat apod. Jediné, co definuje, je formát samotných zpráv (našeho pomyslného listu papíru), a to navíc ještě jen pro potřeby přenosu mezi jednotlivými přenosovými složkami.

Hlavička a tělo zprávy

Doporučení RFC822 chápe zprávu jako text členěný na jednotlivé řádky a rozděluje ji do dvou základních částí: na hlavičku (header) a tělo (body). Dále se podrobněji zabývá syntaxí a sémantikou hlavičky, zatímco obsah těla zprávy nijak přesněji nevymezuje - pouze říká, že hlavička musí předcházet tělu a tělo musí být od hlavičky odděleno nejméně jednou prázdnou řádkou (neboli: vše, co následuje za první prázdnou řádkou, je považováno za tělo zprávy).

Na hlavičku zprávy se doporučení RFC822 dívá jako na posloupnost položek, kterým v originále říká header fields (doslova: pole hlavičky). Každá položka musí začínat na nové řádce (a dokonce na první pozici řádky) a může pokračovat i na dalších řádkách (v takovém případě ale nikoli od první pozice).

Každá položka je vždy uvozena určitým klíčovým slovem (zakončeným dvojtečkou), které definuje její význam (a tím současně ulehčuje práci programům, které mají hlavičku analyzovat a řídit se jejím obsahem). Za tímto uvozujícím klíčovým slovem (a povinnou dvojtečkou) pak následuje vlastní obsah příslušné položky.

Některým položkám hlavičky doporučení RFC822 předepisuje určitou povinnou syntaxi, zatímco jiným nikoli. Logika je zde taková, že obsah některých položek analyzují programy, které se na přenosu zpráv podílí, a povinná syntaxe jim v tom velmi účinně pomáhá. Týká se to především položek, které obsahují adresy a údaje o datu a čase. Naproti tomu u jiných položek (například u položky Subject, vyjadřující předmět zprávy) prakticky nepřipadá v úvahu, že by je bylo potřeba analyzovat, a tak jejich syntaxe není nijak předepsána - mohou to tedy být libovolné texty.

Doporučení RFC822 také nepředepisuje povinné pořadí jednotlivých položek hlavičky (pouze vyslovuje určitá doporučení). Příklad hlavičky sestavené podle RFC822 ukazuje obrázek 84.1.

Položky hlavičky

Samotné doporučení RFC822 definuje poměrně velký počet různých položek pro hlavičky zpráv. Cílem tohoto příspěvku samozřejmě není podat jejich vyčerpávající seznam, či dokonce popis - od toho je samotný dokument RFC822, který je volně dostupný a šiřitelný (stejně jako všechny ostatní dokumenty RFC). My si zde pouze naznačíme některé nejčastější položky a ukážeme si, jak jejich skladba koresponduje s možnostmi, které nabízí dnešní systémy elektronické pošty.

Každá zpráva samozřejmě musí od někoho pocházet - někdo musel mít zájem na jejím odeslání a někdo musel také sestavit její vlastní obsah (tělo zprávy). Doporučení RFC822 na tuto osobu pamatuje položkou "From", například:

From: pet@dcit.cz
Tato položka je přitom jednou z těch, u kterých je předepsána povinná syntaxe. Ta však stále nabízí řadu variant, včetně možností vkládání komentářů, srozumitelných člověku. Například:
From: pet@dcit.cz (Jiri Peterka)
From: Jiri Peterka 
From: "Peterka, Jiri" 
apod. Doporučení RFC822 dále pamatuje i na možnost, že původní iniciátor zprávy (nebo lépe: autor zprávy) není totožný s jejím skutečným odesilatelem. K takovéto situaci může dojít například tehdy, když někdo posílá vzkaz někoho jiného, když si příliš zaneprázdněný šéf nechává odesílat zprávy svou sekterářkou, nebo také například tehdy, když někdo pošle příspěvek do některé z elektronických konferencí. Pak jej totiž pošle nejprve na adresu správce konference a ten ji následně rozešle všem účastníkům konference. Ti pak dostanou zprávu, jejímž odesilatelem je správce konference (ať již je to člověk či pouhý program), zatímco autorem zprávy je někdo úplně jiný. RFC822 se s tím vyrovnává zavedením položky "Sender", která specifikuje odesilatele zprávy (je-li to někdo jiný než autor zprávy, pro kterého je určena položka "From").

Další položkou, která souvisí s možnou disproporcí mezi autorem a odesilatelem zprávy, je položka "Reply-To". Ta totiž explicitně říká, kam mají být zasílány odpovědi,. Například právě u elektronických konferencí je dosti podstatný rozdíl mezi tím, když se odpověď pošle na adresu konference (a pak ji dostanou všichni její účastníci), nebo když se pošle přímo původnímu autorovi (a pak ji dostane pouze on). Pomocí položky "Reply-To" lze explicitně předepsat, kam mají být odpovědi posílány. Je to užitečné například i pro uživatele, kteří mají více pracovišť, resp. svou elektronickou poštu odesílají z více různých míst - pomocí této položky si pak mohou předepsat, že odpovědi jim mají chodit na jedno konkrétní místo. Ještě další možnost nabízí položka "Return-Path", která umožňuje předepsat, kam má být zpráva vrácena v případě její nedoručitelnosti.

Podobnou syntaxi jako položka "From" (i další, které jsme zmiňovali v předchozím odstavci) má i položka "To", určující adresáta zprávy. Jak jsme si již uvedli v předcházejících dílech, zprávy elektronické pošty je možné zasílat i jako tzv. kopie na vědomí (Carbon Copy), a dokonce i jako tzv. "slepé" kopie (Blind Carbon Copy) - o kterých se hlavní adresát zprávy nedozví (na rozdíl od příjemců běžných kopií, o kterých se v hlavičce svého originálu dozví). Pro specifikaci adresátů kopií jsou určeny položky "Cc" a "Bcc", například:

From: Jiri Peterka                  (odesilatel
To: Jan Novak                       (adresát)
Cc: Petr Votava             (příjemce kopie)
Bcc: Jan Pavelka         (příjemce slepé kopie)
V každé přijaté zprávě bývá obvykle obsažen určitý počet položek "Received", které obsahují záznamy o "cestě" zprávy mezi jednotlivými přenosovými složkami - v zásadě by bylo možné říci, že každému jednotlivému "přeskoku" by měla odpovídat jedna tato položka (a jedna další obvykle připadá i na první přenosovou složku, která zprávu přijme k odeslání). V položkách "Received" pak může být vyjádřeno například i to, jakým protokolem byla zpráva přenesena, pod jakým označením apod. - tyto informace jsou většinou určeny pro potřeby ladění a řešení nestandardních situací. Například:
Received: from einar.dcit.cz by rifflet.ibp.fr with SMTP (1.38.193.4/16.2) id AA02305; Wed, 20 Jul 1994 13:56:26 +0200 Received: from kaare.dcit.cz by einar.dcit.cz (AIX 3.2/UCB 5.64/4.03) id AA08541; Wed, 20 Jul 1994 13:56:12 +0200 Received: from frode.dcit.cz by kaare.dcit.cz (5.0/SMI-SVR4) id AA01366; Wed, 20 Jul 1994 13:56:56 +0200
Další položky, na které RFC822 pamatuje, umožňují vyjádřit datum a čas, kdy byla zpráva zadána k odeslání (položka "Date"), její předmět (položka "Subject") apod. Dále RFC822 pamatuje například i na možnost automatického přesměrovávání (tzv. auto-forward), kdy uživatel sice přijímá poštu na určité adrese, ale odsud si ji nechává automaticky posílat ještě někam jinak - což je výhodné například tehdy, když na určitou dobu odcestuje někam, kde je stále v dosahu elektronické pošty, a chce-li nadále přijímat svou běžnou elektronickou korespondenci. Doporučení RFC822 zavádí za tímto účelem celou sérii položek začínajících prefixem "Resent-", například:
Resent-From: pet@dcit.cz                          (odkud byla přesměrovaná zpráva odeslána)
Resent-To: peterka@rifflet.ibp.fr                 (kam ....)
Resent-Date: Wed, 20 Jul 94 13:52:34 MET-1DST     (kdy .....)

Adresy á la RFC822

Další velmi důležitou součástí doporučení RFC822 je i přesná specifikace možných zápisů adres příjemců i odesilatelů, kterou RFC822 definuje v rámci předepsané syntaxe těch položek, které tyto adresy obsahují (např. položky "From", "To","Sender" apod.). Možné způsoby zápisu adres přitom vychází z existence hierarchicky uspořádaných domén a tomu odpovídajících pravidel pro tvorbu adres, které jsou používány nejen v rámci Internetu (a kterými jsme se zabývali již v 80. dílu tohoto seriálu). Jelikož jejich přesná syntaxe je specifikována právě doporučením RFC822, jsou tyto adresy označovány často také jako "RFC822 adresy".

Možnosti dalšího rozšiřování

Repertoár položek (header fields), které doporučení RFC822 zavádí, není chápán jako pevně daný a nerozšiřitelný. Počítá naopak s tím, že další položky budou zaváděny postupně (jako tzv. "extension-fields") a budou standardizovány stejným způsobem jako samotné doporučení RFC822 (tj. formou dokumentů RFC).

Kromě toho ale RFC822 počítá i s tím, že také uživatelé si mohou chtít zavádět své více či méně "lokální" položky, sledující potřeby jejich konkrétních poštovních systémů. Pamatováno je i na takovéto uživatelsky definované položky. Pouze se požaduje, aby jejich identifikátory (uvozující položku) nekolidovaly s jinými (standardizovanými) položkami. Za tímto účelem je v doporučení RFC822 stanoveno, že žádné "oficiální" rozšiřující položky, které budou kdy zavedeny, nebudou začínat řetězcem "X-". Ten je naopak doporučen jako začátek všech uživatelských rozšíření. Například položka:

X-Mailer: ELM (version 2.2 PL16 mips 1)
napovídá o tom, jaký poštovní program byl použit pro sestavení zprávy. Systémy, které takovouto položku (obecně jakoukoli uživatelskou položku) dokáží rozpoznat a správně interpretovat, ji mohou využít - ostatní ji chápou jednoduše jako komentář a ignorují ji.
From pav@dcit.cz Wed Jul 20 16:23 MET 1994                                 ( jméno odesilatele s údajem o době doručení)
Received: from einar.dcit.cz by rifflet.ibp.fr with SMTP                   ( počítač einar.dcit.cz předal tuto zprávu)
      (1.38.193.4/16.2) id AA02512; Wed, 20 Jul 1994 16:23:15 +0200           ( počítači rifflet.ibp.fr)
Return-Path:                                                  ( údaj o zpáteční cestě k autorovi dopisu)
Received: by einar.dcit.cz (AIX 3.2/UCB 5.64/4.03)                         ( počítač einar. dcit.cz převzal tuto zprávu)
       id AA22996; Wed, 20 Jul 1994 16:22:23 +0200                            ( k odeslání)
Date: Wed, 20 Jul 1994 16:22:23 +0200                                      ( datum a čas, kdy byla zpráva předána k odeslání)
From: "Jan Pavelka"                                           ( odesilatel)
Message-Id: <9407201422.AA22996@einar.dcit.cz>                             ( identifikátor zprávy)
Reply-To: pav@dcit.cz                                                      ( kam mají být odesílány odpovědi)
To: peterka@rifflet.ibp.fr                                                 ( adresát)
Subject: Jak je ve Francii?                                                ( předmět zprávy)
<<>>
Obr. 84.1: Příklad hlavičky zprávy dle RFC822