av网站免费线看精品_国产做a爱视频免费不_深爱激情网开心五月天_伊人五月天在线视频网

 
MIME Type 引出的兩難困境
發(fā)布時間:2005-03-31   瀏覽次數(shù):1229068
一切從一個糟糕的瀏覽器開始,它完全不支持 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 不是個人指定的,是經(jīng)過 ietf 組織協(xié)商,以 RFC 的形式作為建議的標(biāo)準(zhǔn)發(fā)布在網(wǎng)上的,大多數(shù)的 Web 服務(wù)器和用戶代理都會支持這個規(guī)范 (順便說一句,Email 附件的類型也是通過 MIME Type 指定的)。

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

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

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

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

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

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

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

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

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

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

  那么,那些瀏覽器正常的支持了 XHTML 呢?答案是 Mozilla、基于 Mozilla 的瀏覽器如 Netscape 7 和 Firefox、較新版本的 Opera 和 Safari 等等。但不包括 Microsoft Internet Explorer。問題是,這一“不包括”,除掉了大約 90% 的瀏覽器市場啊,在我們抓狂以前,先來看看 IE 是什么處理 application/xhtml+xml 的:IE 不認(rèn)得這種 MIME Type,它要么提示你是否下載那個文件,要么把文件內(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)簽湯的老辦法。

  這個時候你會問了,在我看起來,老辦法顯示得很好啊,干嗎為此感到頭疼呢?問題正是出在“看起來”這個詞上,實(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è)置背景色是給整個文檔設(shè)置了背景色,但在 XHTML 中并非如此,給 設(shè)定背景色的效果和給 設(shè)定的不同。
  3. 在 HTML 中 CSS 規(guī)則中對元素的匹配是大小寫不敏感的,BODY 和 body 匹配的是同一個元素,但在 XHTML 中卻是大小寫敏感的。
  4. 在注釋中隱藏的 JavaScript 腳本會被 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ù)會死在前面列舉的某一條原因下,無法正常顯示。然而這不好說是 XHTML 的錯,正常的處理理應(yīng)如此,只不過我們一直被縱容了。

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

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

  XHTML 的優(yōu)勢

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

  1. 除了前面討論的用戶代理易于處理以外,實(shí)際上,大量的基于 XML 的工具,許多對 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 對你是無效的,算有效吧,個人來說,其實(shí)也沒有多少人對 XHTML 進(jìn)行 XML 解析,因為能做到的,大概也是從 h1、h2 這些標(biāo)記中讀出文檔結(jié)構(gòu)一類的功能,實(shí)在沒什么大用處。

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

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

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

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

  XHTML 啊 XHTML

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

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

  答案還是個問號。

  小結(jié)

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

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

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

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

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

  注釋
  1. 也并非完全沒有辦法,對于用 PHP 或者 ASP 這樣創(chuàng)建的動態(tài)內(nèi)容而言,通過檢測 HTTP 頭來進(jìn)行內(nèi)容協(xié)商是的辦法:給 `Accept: ` 中包含了 `application/xhtml+xml` 的請求提供 `Content-type: application/xhtml+xml` 的數(shù)據(jù),而給其他的請求提供 `text/html` 的數(shù)據(jù)。(在 456 Berea Street 的一篇文章詳細(xì)解釋了這種方法,實(shí)際上,打開 Mozilla/Firefox 的 `about:config` 頁面,你可以找到相關(guān)的配置 `network.http.accept.default` 來驗證一下 Mozilla 是否發(fā)送了正確的 HTTP 頭。),這幾乎是一種完美的方法了 (實(shí)際上靜態(tài)內(nèi)容大概可以通過 Web 服務(wù)器的內(nèi)容協(xié)商功能實(shí)現(xiàn)這種提供方式),但考慮到本文主要的目的是探討是否應(yīng)該用 XHTML,所以不在正文中詳細(xì)討論。
  2. 仍舊是指對普通用戶而言,事實(shí)上必須承認(rèn),XHTML 的出現(xiàn)對于整個 Web 本身的長遠(yuǎn)發(fā)展有好處。
  3. 其實(shí)話不該說得那么絕,應(yīng)該說 XHTML 的出現(xiàn)是有必要的,但其帶來的好處絕大部分是對 Web 本身的,長遠(yuǎn)的,現(xiàn)在難以看出的好處,對用戶或者開發(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)自:動態(tài)網(wǎng)制作指南 www.knowsky.com
立即預(yù)約