国产毛片午夜福利,国产黄网,国产亚洲天堂,97国产精品

  •  
    MIME Type 引出的兩難困境
    發(fā)布時(shí)間:2005-03-31   瀏覽次數(shù):1188737
    一切從一個(gè)糟糕的瀏覽器開始,它完全不支持 XHTML。

      什么是 MIME Type?

      為什么這么說呢?首先,我們要了解瀏覽器是如何處理內(nèi)容的。在瀏覽器中顯示的內(nèi)容有 HTML、有 XML、有 GIF、還有 Flash……那么,瀏覽器是如何區(qū)分它們,什么內(nèi)容用什么形式來顯示呢?答案是 MIME Type,也是該資源的媒體類型。

      媒體類型通常是通過 HTTP 協(xié)議,由 Web 服務(wù)器告知瀏覽器的,更準(zhǔn)確地說,是通過 Content-Type 來表示的,例如:

    Content-Type: text/html
    

      表示內(nèi)容是 text/html 類型,也是超文本文件。為什么是“text/html”而不是“html/text”或者別的什么?MIME Type 不是個(gè)人指定的,是經(jīng)過 ietf 組織協(xié)商,以 RFC 的形式作為建議的標(biāo)準(zhǔn)發(fā)布在網(wǎng)上的,大多數(shù)的 Web 服務(wù)器和用戶代理都會(huì)支持這個(gè)規(guī)范 (順便說一句,Email 附件的類型也是通過 MIME Type 指定的)。

      通常只有一些在互聯(lián)網(wǎng)上獲得廣泛應(yīng)用的格式才會(huì)獲得一個(gè) MIME Type,如果是某個(gè)客戶端自己定義的格式,一般只能以 application/x- 開頭。

      XHTML 正是一個(gè)獲得廣泛應(yīng)用的格式,因此,在 RFC 3236 中,說明了 XHTML 格式文件的 MIME Type 應(yīng)該是 application/xhtml+xml。

      當(dāng)然,處理本地的文件,在沒有人告訴瀏覽器某個(gè)文件的 MIME Type 的情況下,瀏覽器也會(huì)做一些默認(rèn)的處理,這可能和你在操作系統(tǒng)中給文件配置的 MIME Type 有關(guān)。比如在 Windows 下,打開注冊(cè)表的“HKEY_LOCAL_MACHINESOFTWAREClassesMIMEDatabaseContent Type”主鍵,你可以看到所有 MIME Type 的配置信息。

      瀏覽器處理 XHTML 和 HTML 有什么區(qū)別?

      HTML 的語法過于隨意了,有許多簡(jiǎn)寫,標(biāo)記不匹配的復(fù)雜情況,同時(shí)長(zhǎng)期 Web 發(fā)展下來積累下來了許多錯(cuò)誤的用法——比如一個(gè)文檔里完全沒有 標(biāo)記——但瀏覽器還是得支持它,可想而知,為了支持這些“Tag Soup”——也是我們所說的那些,亂成一鍋粥的標(biāo)簽——瀏覽器要很費(fèi)力地去猜測(cè)一段標(biāo)記的意思,努力以用戶期望的形式表達(dá)出來。一句話說,雖然 HTML 4.01 允許你用語義化、結(jié)構(gòu)化的、內(nèi)容與表現(xiàn)分離的方法來書寫標(biāo)記,但由于它沿襲了 HTML 這種格式,使得瀏覽器對(duì)于凡是 MIME Type 為“text/html”的文件,都得采用一種非常費(fèi)勁的方法去處理,這對(duì)于 Web 的發(fā)展是很不利的。

      再說除了瀏覽器,還有許多其他的用戶代理要閱讀 HTML:純文本的瀏覽工具、讀屏器等等。

      創(chuàng)造 XHTML,很大一部分原因正是要通過 XML 重新嚴(yán)格地規(guī)范一遍標(biāo)記,讓這些用戶代理可以以一種更簡(jiǎn)便的方式來解析這些標(biāo)記。因此,XHTML 這種新的格式,天生要求內(nèi)容的發(fā)布者必須以嚴(yán)格的方式來標(biāo)記自己的文檔。

      當(dāng)然,XHTML 對(duì)于內(nèi)容提供者也有好處,此處先不展開,詳見下文。

      MIME Type 與之又有什么關(guān)系?

      把前兩節(jié)的內(nèi)容合起來,你顯然可以發(fā)現(xiàn):一個(gè)正常支持 XHTML 的瀏覽器會(huì)根據(jù)服務(wù)器提供的 MIME Type 是 text/html 還是 application/xhtml+xml 來區(qū)分獲取到的內(nèi)容是 HTML 還是 XHTML,對(duì)這兩種格式,分別以兩種不同的方式來解析文檔,后者解析起來要嚴(yán)格得多,但對(duì)于用戶代理開發(fā)者和內(nèi)容提供者都有很大的好處。

      那么,那些瀏覽器正常的支持了 XHTML 呢?答案是 Mozilla、基于 Mozilla 的瀏覽器如 Netscape 7 和 Firefox、較新版本的 Opera 和 Safari 等等。但不包括 Microsoft Internet Explorer。問題是,這一“不包括”,除掉了大約 90% 的瀏覽器市場(chǎng)啊,在我們抓狂以前,先來看看 IE 是什么處理 application/xhtml+xml 的:IE 不認(rèn)得這種 MIME Type,它要么提示你是否下載那個(gè)文件,要么把文件內(nèi)容當(dāng)作純文本顯示出來,反正是不可能正O允頸曇恰?/P>

      這正是造成我們不得不給 XHTML 文檔標(biāo)以 text/html 的原因 1,實(shí)際上,目前 Web 上 95% 的 XHTML,都是扮成 HTML 的 XHTML (包括 w3.org),瀏覽器 (包括我們引以為傲的 Mozilla) 壓根沒有用 XML 解析器去解析那些 XHTML,而是沿用處理標(biāo)簽湯的老辦法。

      這個(gè)時(shí)候你會(huì)問了,在我看起來,老辦法顯示得很好啊,干嗎為此感到頭疼呢?問題正是出在“看起來”這個(gè)詞上,實(shí)際上,一些細(xì)微但是不可忽略的差別仍然存在。

      application/xhtml+xml 方式解析 XHTML 與用 text/html 方式解析的差別

      下面所說的“HTML”,是指 text/html 的解析方式;相應(yīng)地“XHTML”是指“application/xhtml+xml”的解析方式。

    1. 這是最重要的,嚴(yán)格的 XML 解析至少要求文檔是 well-formed 的,也是標(biāo)簽要正確開閉,& 等 XML 實(shí)體要正確使用。
    2. 在 HTML 中 是用戶所能看到的全部視域,給 body 設(shè)置背景色是給整個(gè)文檔設(shè)置了背景色,但在 XHTML 中并非如此,給 設(shè)定背景色的效果和給 設(shè)定的不同。
    3. 在 HTML 中 CSS 規(guī)則中對(duì)元素的匹配是大小寫不敏感的,BODY 和 body 匹配的是同一個(gè)元素,但在 XHTML 中卻是大小寫敏感的。
    4. 在注釋中隱藏的 JavaScript 腳本會(huì)被 XHTML 忽略。
    5. document.write() 不能在 XHTML 中使用。
    6. HTML DOM 和 XHTML DOM 的元素和屬性返回值是不同的,HTML 中是大寫,XHTML 中是小寫。
    7. 還有不少其他的 DOM 問題。

      總結(jié)起來是,我們正在廣泛使用的其實(shí)是一種看起來已經(jīng) XHTML 化的 HTML,想象一下吧,如果要求所有這些網(wǎng)站立即把 MIME Type 換成 application/xhtml+xml,即便用可以正常解析 XHTML 的瀏覽器來瀏覽,它們多數(shù)會(huì)死在前面列舉的某一條原因下,無法正常顯示。然而這不好說是 XHTML 的錯(cuò),正常的處理理應(yīng)如此,只不過我們一直被縱容了。

      可是 W3C 還是不斷要求我們以正確的 MIME Type 來提供 XHTML,為什么呢?因?yàn)槲覀円玫?XHTML 提供的好處啊,只有被認(rèn)為是 XHTML 或者 XML 文檔的東西,瀏覽器才會(huì)啟用這些“好處”,比如你可以試著在 IE 中打開 XHTML 中嵌入的 MathML 看看,沒有效果,它被當(dāng)作 HTML 一樣顯示。

      現(xiàn)在的問題是,既然把文檔設(shè)定為真正的 XHTML 是如此的麻煩,會(huì)帶來如此多的問題,干嗎不舒舒服服地呆在 HTML 上呢?為什么要往 XHTML 過渡?XHTML 提供的“好處”值得我們?yōu)榇烁冻鋈绱硕嗟拇鷥r(jià)嗎?

      XHTML 的優(yōu)勢(shì)

      最重要的兩點(diǎn)是:

    1. 除了前面討論的用戶代理易于處理以外,實(shí)際上,大量的基于 XML 的工具,許多對(duì) XML 有很好支持的編程語言,都能夠方便地解析你的文檔,從中提取出需要的信息。當(dāng)然,也包括搜索引擎。
    2. 你可以利用 XHTML 繼承自 XML 的良好的擴(kuò)展性,比如在 XHTML 中嵌入 RDF 數(shù)據(jù),描述文檔的語義信息;加入 MathML 標(biāo)記,描述數(shù)學(xué)公式;加入 SVG 標(biāo)記,使用可伸縮矢量圖型。

      顯然,如果文檔連 well-formed 都做不到,優(yōu)點(diǎn) 1 對(duì)你是無效的,算有效吧,個(gè)人來說,其實(shí)也沒有多少人對(duì) XHTML 進(jìn)行 XML 解析,因?yàn)槟茏龅降模蟾乓彩菑?h1、h2 這些標(biāo)記中讀出文檔結(jié)構(gòu)一類的功能,實(shí)在沒什么大用處。

      而第二點(diǎn)對(duì)大多數(shù)內(nèi)容提供者來說,太遠(yuǎn)了,RDF 是什么東東?加入 RDF 信息有什么好處?沒多少人知道或者有興趣知道;MathML?這是可擴(kuò)展性目前用得最多的地方,因?yàn)楹芏?MathML 閱讀和編輯工具已經(jīng)普及了,但如果你不是個(gè)成天在公式中打轉(zhuǎn)的科學(xué)工作者,多半對(duì)此也沒有興趣;SVG 呢?倒是挺有意思,但目前顯然沒有獲得廣泛的應(yīng)用,事實(shí)上,日后能否獲得廣泛的應(yīng)用,還要看它能不能在與 Flash 的競(jìng)爭(zhēng)中活下來:成為標(biāo)準(zhǔn)的東西被人拋棄也是常有的事。

      總結(jié)起來,所有這些優(yōu)點(diǎn)幾乎都是一些空頭支票,一些未來才能實(shí)現(xiàn)甚至未來都不知道能不能實(shí)現(xiàn)的東西,比如說你現(xiàn)在在開發(fā)一個(gè) CMS 系統(tǒng),如果現(xiàn)在都已經(jīng)不能保證里面的內(nèi)容 well-formed,有什么理由說以后,數(shù)據(jù)越來越多以后,反而會(huì)回頭去把錯(cuò)誤的標(biāo)記一一改正?

      事實(shí)上,用不到這些空頭支票,我們的生活幾乎沒有受到任何影響。

      那么,是否這是說,XHTML 幾乎是一個(gè)雞肋了 ?

      XHTML 啊 XHTML

      行文至此,已經(jīng)陷入了僵局,其實(shí)我本無意把 XHTML 說得那么差的,但問題是我每句說的都是實(shí)話呀,也沒有忽略什么有必要提到的因素,但反復(fù)查考,總結(jié)起來還是那一句話:XHTML 其實(shí)是一個(gè)帶一點(diǎn)理想主義的,對(duì)普通用戶來說,相比 HTML 4.01 并沒有顯見優(yōu)勢(shì)的格式。

      于是我們陷入了兩難困境:刨掉那些花言巧語,沒有任何顯見的優(yōu)點(diǎn)吸引我們我們轉(zhuǎn)向 XHTML,但如果我們永遠(yuǎn)躺在 HTML 4.01 舒服的被窩里,Web 豈不是永不前進(jìn)了?

      答案還是個(gè)問號(hào)。

      小結(jié)

      本來,僅僅為了未來的錦繡圖景,大家多數(shù)還是愿意轉(zhuǎn)向 XHTML 的,這大概是個(gè)博弈論中微妙的平衡,用戶、瀏覽器廠家、標(biāo)準(zhǔn)制定者三家玩的一個(gè)游戲,但 IE 打破了這個(gè)平衡:它不支持 application/xhtml+xml,于是用戶只好都以 text/html 來發(fā)布 XHTML 頁面。

      如果把他們?nèi)烁窕何矣X得“用戶”大概是個(gè)剃頭挑子一頭熱的家伙,他們?yōu)樽约旱?XHTML 頁面在一切瀏覽器上都如此美好而感到滿意,卻渾不知道背后其實(shí)還是 HTML,自己沒沾著一點(diǎn)“X”的好處。

      這時(shí)標(biāo)準(zhǔn)制定者——他一定是個(gè)理想主義者——也不滿意,因?yàn)橛脩羝鋵?shí)還是在以 HTML 的方式來寫 XHTML 的,根本沒準(zhǔn)備好向 XHTML 進(jìn)行轉(zhuǎn)變的決心,標(biāo)準(zhǔn)制定者一心領(lǐng)著大家往 Web 美好的未來遠(yuǎn)航,卻發(fā)現(xiàn)無論是用戶還是瀏覽器廠商都在盡給他添亂。

      瀏覽器廠商們——他們擁有的籌碼,卻始終冷眼旁觀——此時(shí)卻在開心地內(nèi)斗,對(duì)此情況聳聳肩表示無能為力。

      你可能會(huì)對(duì)此感到沮喪,但這的確是目前 Web 中的事實(shí),承認(rèn)也好不承認(rèn)也好,確定一個(gè)目標(biāo),然后艱難而執(zhí)著地前行,大概是我們這些標(biāo)準(zhǔn)推廣者能做的。

      注釋
    1. 也并非完全沒有辦法,對(duì)于用 PHP 或者 ASP 這樣創(chuàng)建的動(dòng)態(tài)內(nèi)容而言,通過檢測(cè) HTTP 頭來進(jìn)行內(nèi)容協(xié)商是的辦法:給 `Accept: ` 中包含了 `application/xhtml+xml` 的請(qǐng)求提供 `Content-type: application/xhtml+xml` 的數(shù)據(jù),而給其他的請(qǐng)求提供 `text/html` 的數(shù)據(jù)。(在 456 Berea Street 的一篇文章詳細(xì)解釋了這種方法,實(shí)際上,打開 Mozilla/Firefox 的 `about:config` 頁面,你可以找到相關(guān)的配置 `network.http.accept.default` 來驗(yàn)證一下 Mozilla 是否發(fā)送了正確的 HTTP 頭。),這幾乎是一種完美的方法了 (實(shí)際上靜態(tài)內(nèi)容大概可以通過 Web 服務(wù)器的內(nèi)容協(xié)商功能實(shí)現(xiàn)這種提供方式),但考慮到本文主要的目的是探討是否應(yīng)該用 XHTML,所以不在正文中詳細(xì)討論。
    2. 仍舊是指對(duì)普通用戶而言,事實(shí)上必須承認(rèn),XHTML 的出現(xiàn)對(duì)于整個(gè) Web 本身的長(zhǎng)遠(yuǎn)發(fā)展有好處。
    3. 其實(shí)話不該說得那么絕,應(yīng)該說 XHTML 的出現(xiàn)是有必要的,但其帶來的好處絕大部分是對(duì) Web 本身的,長(zhǎng)遠(yuǎn)的,現(xiàn)在難以看出的好處,對(duì)用戶或者開發(fā)者的好處微乎其微。
      參考文獻(xiàn)
    1. Ian Hickson, Sending XHTML as text/html Considered Harmful
    2. Gez Lemon, It’s all in the MIME
    3. Gez Lemon, Specifying a MIME Type
    4. Roger Johansson, Developing With Web Standards, Recommendations and best practices, Part 5: XHTML
    5. Network Working Group, The ‘a(chǎn)pplication/xhtml+xml’ Media Type
    6. Tommy Olsson, Content Negotiation
    7. W3C, XHTML Media Types
    轉(zhuǎn)自:動(dòng)態(tài)網(wǎng)制作指南 www.knowsky.com
    立即預(yù)約