VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:35/94
RoΦnφk:1994
Rubrika/kategorie: Co je Φφm ... v poΦφtaΦov²ch sφtφch
Dφl:84

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka: Co je Φφm ... v poΦφtaΦov²ch sφtφch (84):

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

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm