MIME Multipurpose Internet Mail Extension 多用途因特網(wǎng)郵件擴(kuò)展
MIME類型就是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴(kuò)展名文件被訪問的時(shí)候,瀏覽器會(huì)自動(dòng)使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。
MIME的英文全稱是"Multipurpose Internet Email Extension" 多功能Internet 郵件擴(kuò)充服務(wù),它是一種多用途網(wǎng)際郵件擴(kuò)充協(xié)議,在1992年最早應(yīng)用于電子郵件系統(tǒng),但后來也應(yīng)用到瀏覽器。服務(wù)器會(huì)將它們發(fā)送的多媒體數(shù)據(jù)的類型告訴瀏覽器,而通知手段就是說明該多媒體數(shù)據(jù)的MIME類型,從而讓瀏覽器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服務(wù)器將MIME標(biāo)志符放入傳送的數(shù)據(jù)中來告訴瀏覽器使用哪種插件讀取相關(guān)文件。
瀏覽器接收到文件后,會(huì)進(jìn)入插件系統(tǒng)進(jìn)行查找,查找出哪種插件可以識別讀取接收到的文件。如果瀏覽器不清楚調(diào)用哪種插件系統(tǒng),它可能會(huì)告訴用戶缺少某插件,或者直接選擇某現(xiàn)有插件來試圖讀取接收到的文件,后者可能會(huì)導(dǎo)致系統(tǒng)的崩潰。傳輸?shù)男畔⒅腥鄙費(fèi)IME標(biāo)識可能導(dǎo)致的情況很難估計(jì),因?yàn)槟承┯?jì)算機(jī)系統(tǒng)可能不會(huì)出現(xiàn)什么故障,但某些計(jì)算機(jī)可能就會(huì)因此而崩潰。
檢查一個(gè)服務(wù)器是否正確設(shè)置了MIME類型的步驟是:
1. 在Netscape瀏覽器中打開服務(wù)器網(wǎng)頁
2. 進(jìn)入"View"菜單,選擇"Page Info"
3. 在彈出的窗口中點(diǎn)擊上層框架中的"EMBED"
4. 在下層框架中查看MIME的類型是否為"application/x-director"或"application/x-shockwave-flash",如果是上述信息的話表明服務(wù)器已經(jīng)正確設(shè)置了MIME類型;而如果MIME類型列出的是文本內(nèi)容、八位一組的數(shù)據(jù)或是其它形式均表明服務(wù)器的MIME類型沒有設(shè)置正確。
如果服務(wù)器沒有正確標(biāo)明其發(fā)送的數(shù)據(jù)的類型,服務(wù)器管理員應(yīng)該正確添加相關(guān)信息,具體操作方法非常簡單快捷。
Microsoft公司應(yīng)用于Windows系統(tǒng)下的瀏覽器使用ActiveX控件,而不是Netscape插件,這種瀏覽器不必象其它瀏覽器那樣依靠MIME的編碼。"OBJECT"標(biāo)簽的"CLSID"屬性準(zhǔn)確地標(biāo)明了應(yīng)調(diào)用哪種程序來讀取接收到的文件,因此瀏覽器不必象"EMBED"標(biāo)簽?zāi)菢舆x擇一種讀取程序。正因?yàn)槿绱,你往往?huì)在使用帶插件的瀏覽器時(shí)遇到MIME問題,而使用ActiveX控件的瀏覽器則很少出現(xiàn)此類麻煩。
正由于上述工作方式的差別也解釋了一種現(xiàn)象,不知你是否發(fā)現(xiàn)在使用Netscape瀏覽器播放WAV文件時(shí),瀏覽器會(huì)調(diào)用LiveConnect插件進(jìn)行播放,而其它瀏覽器一般都使用通用的QuickTime的播放插件等來進(jìn)行播放,這是因?yàn)镹etscape瀏覽器接收文件需要讀取MIME標(biāo)識符,以便決定調(diào)用哪種程序來讀取接收的文件,而服務(wù)器設(shè)置在Netscape瀏覽器中播放WAV文件應(yīng)使用LiveConnect插件,因此Netscape瀏覽器接收到WAV格式的文件時(shí)必然就會(huì)調(diào)用LiveConnect插件,但由于其它瀏覽器不使用這種方式,因此它們都使用系統(tǒng)默認(rèn)的播放WAV格式文件的播放器。當(dāng)然Flash電影文件并不存在這種問題,因?yàn)橹挥蠪lash播放器才能夠正確讀取這種格式的文件。
在把輸出結(jié)果傳送到瀏覽器上的時(shí)候,瀏覽器必須啟動(dòng)適當(dāng)?shù)膽?yīng)用程序來處理這個(gè)輸出文檔。這可以通過多種類型MIME(多功能網(wǎng)際郵件擴(kuò)充協(xié)議)來完成。在HTTP中,MIME類型被定義在Content-Type header中。
例如,假設(shè)你要傳送一個(gè)Microsoft Excel文件到客戶端。那么這時(shí)的MIME類型就是“application/vnd.ms-excel”。在大多數(shù)實(shí)際情況中,這個(gè)文件然后將傳送給Execl來處理(假設(shè)我們設(shè)定Execl為處理特殊MIME類型的應(yīng)用程序)。在ASP中,設(shè)定MIME類型的方法是通過Response對象的ContentType屬性。
多媒體文件格式MIME
最早的HTTP協(xié)議中,并沒有附加的數(shù)據(jù)類型信息,所有傳送的數(shù)據(jù)都被客戶程序解釋為超文本標(biāo)記語言HTML 文檔,而為了支持多媒體數(shù)據(jù)類型,HTTP協(xié)議中就使用了附加在文檔之前的MIME數(shù)據(jù)類型信息來標(biāo)識數(shù)據(jù)類型。
MIME意為多目Internet郵件擴(kuò)展,它設(shè)計(jì)的最初目的是為了在發(fā)送電子郵件時(shí)附加多媒體數(shù)據(jù),讓郵件客戶程序能根據(jù)其類型進(jìn)行處理。然而當(dāng)它被HTTP協(xié)議支持之后,它的意義就更為顯著了。它使得HTTP傳輸?shù)牟粌H是普通的文本,而變得豐富多彩。
每個(gè)MIME類型由兩部分組成,前面是數(shù)據(jù)的大類別,例如聲音audio、圖象image等,后面定義具體的種類。
常見的MIME類型
超文本標(biāo)記語言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF圖形 .gif image/gif
JPEG圖形 .ipeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
Internet中有一個(gè)專門組織IANA來確認(rèn)標(biāo)準(zhǔn)的MIME類型,但I(xiàn)nternet發(fā)展的太快,很多應(yīng)用程序等不及IANA來確認(rèn)他們使用的MIME類型為標(biāo)準(zhǔn)類型。因此他們使用在類別中以x-開頭的方法標(biāo)識這個(gè)類別還沒有成為標(biāo)準(zhǔn),例如:x-gzip,x-tar等。事實(shí)上這些類型運(yùn)用的很廣泛,已經(jīng)成為了事實(shí)標(biāo)準(zhǔn)。只要客戶機(jī)和服務(wù)器共同承認(rèn)這個(gè)MIME類型,即使它是不標(biāo)準(zhǔn)的類型也沒有關(guān)系,客戶程序就能根據(jù)MIME類型,采用具體的處理手段來處理數(shù)據(jù)。而Web服務(wù)器和瀏覽器(包括操作系統(tǒng))中,缺省都設(shè)置了標(biāo)準(zhǔn)的和常見的MIME類型,只有對于不常見的 MIME類型,才需要同時(shí)設(shè)置服務(wù)器和客戶瀏覽器,以進(jìn)行識別。
由于MIME類型與文檔的后綴相關(guān),因此服務(wù)器使用文檔的后綴來區(qū)分不同文件的MIME類型,服務(wù)器中必須定義文檔后綴和MIME類型之間的對應(yīng)關(guān)系。而客戶程序從服務(wù)器上接收數(shù)據(jù)的時(shí)候,它只是從服務(wù)器接受數(shù)據(jù)流,并不了解文檔的名字,因此服務(wù)器必須使用附加信息來告訴客戶程序數(shù)據(jù)的MIME類型。服務(wù)器在發(fā)送真正的數(shù)據(jù)之前,就要先發(fā)送標(biāo)志數(shù)據(jù)的MIME類型的信息,這個(gè)信息使用Content-type關(guān)鍵字進(jìn)行定義,例如對于HTML文檔,服務(wù)器將首先發(fā)送以下兩行MIME標(biāo)識信息,這個(gè)標(biāo)識并不是真正的數(shù)據(jù)文件的一部分。
Content-type: text/html
注意,第二行為一個(gè)空行,這是必須的,使用這個(gè)空行的目的是將MIME信息與真正的數(shù)據(jù)內(nèi)容分隔開。
MIME利用了一個(gè)事實(shí)就是,RFC 822在消息體的內(nèi)容中做了一點(diǎn)限制:唯一的限制就是只能使用簡單的ASCII文本。所以,MIME信息由正常的Internet文本郵件組成,文本郵件擁有一些特別的符合RFC 822的信息頭和格式化過的信息體(用ASCII 的子集來表示的附件)。這些MIME頭給出了一種在郵件中表示附件的特別的方法。
MIME信息的剖析
一個(gè)普通的文本郵件的信息包含一個(gè)頭部分(To: From: Subject: 等等)和一個(gè)體部分(Hello Mr.,等等)。在一個(gè)符合MIME的信息中,也包含一個(gè)信息頭并不奇怪,郵件的各個(gè)部分叫做MIME段,每段前也綴以一個(gè)特別的頭。MIME郵件只是基于RFC 822郵件的一個(gè)擴(kuò)展。然而它有著自己的RFC規(guī)范集。
頭字段
MIME頭根據(jù)在郵件包中的位置,大體上分為MIME信息頭和MIME段頭。(譯者:MIME信息頭指整個(gè)郵件的頭,而MIME段頭只每個(gè)MIME段的頭。)
MIME信息頭有:
MIME-Version:
這個(gè)頭提供了所用MIME的版本號。這個(gè)值習(xí)慣上為1.0。
Content-Type:
它定義了數(shù)據(jù)的類型,以便數(shù)據(jù)能被適當(dāng)?shù)奶幚。有效的類型有:text,
image,audio,video, applications,multipart和message。注意任何一個(gè)二進(jìn)制附件都應(yīng)該被叫做application/octet- stream。這個(gè)頭的一些用例為:image/jpg, application/mswork,multipart/mixed,這只是很少的一部分。
Content-Transfer-Encoding:
這是所有頭中最重要的一個(gè),因?yàn)樗f明了對數(shù)據(jù)所執(zhí)行的編碼方式,客
戶/MUA 將用它對附件進(jìn)行解碼。對于每個(gè)附件,可以使用7bit,8bit,
binary ,quoted-printable,base64和custom中的一種編碼方式。7bit編碼是用在US ASCII字符集上的常用的一種編碼方式,也就是,保持它的原樣。8bit和binary編碼一般不用。對人類可讀的標(biāo)準(zhǔn)文本,如果傳輸要經(jīng)過對格式有影響的網(wǎng)關(guān)時(shí)對其進(jìn)行保護(hù),可以使用quoted printable 。Base64是一種通用方法,在需要決定使用哪一種編碼方法時(shí),它提供了一個(gè)不用費(fèi)腦子的選擇;它通常用在二進(jìn)制,非文本數(shù)據(jù)上。注意,任何非7bit 數(shù)據(jù)必須用一種模式編碼,這樣它就可以通過Internet郵件網(wǎng)關(guān)!
Content-ID:
如果Content-Type是message/external-body或multipart/alternative時(shí),這個(gè)
頭就有用了。它超出了本文的范圍。
Content-Des cription:
這是一個(gè)可選的頭。它是任何信息段內(nèi)容的自由文本描述。描述必須使用us-ascii碼。
Content-Disposition:
一個(gè)試驗(yàn)性的頭,它用于給客戶程序/MUA提供提示,來決定是否在行內(nèi)顯示附件或作為單獨(dú)的附件。
MIME段頭(出現(xiàn)在實(shí)際的MIME附件部分的頭),除了MIME-Version頭,可以擁有以上任何頭字段。如果一個(gè)MIME頭是信息塊的一部分,它將作用于整個(gè)信息體。例如,如果Content-Transfer-Encoding顯示在信息(指整個(gè)信息)頭中,它應(yīng)用于整個(gè)信息體,但是如果它顯示在一個(gè)MIME段里,它"只能"用于那個(gè)段中.
注意:其可以對自動(dòng)對收到的郵件進(jìn)行解密