MIME Type 引出的兩難困境

2021-06-18 08:10:01 字數 3199 閱讀 1406

-

一切從乙個糟糕的瀏覽器開始,它完全不支援 xhtml。

什麼是 mime type?

為什麼這麼說呢?首先,我們要了解瀏覽器是如何處理內容的。在瀏覽器中顯示的內容有 html、有 xml、有 gif、還有 flash……那麼,瀏覽器是如何區分它們,絕對什麼內容用什麼形式來顯示呢?答案是 mime type,也就是該資源的**型別。

**型別通常是通過 http 協議,由 web 伺服器告知瀏覽器的,更準確地說,是通過 content-type 來表示的,例如:

content-type: text/html

表示內容是 text/html 型別,也就是超文字檔案。為什麼是「text/html」而不是「html/text」或者別的什麼?mime type 不是個人指定的,是經過 ietf 組織協商,以 rfc 的形式作為建議的標準發布在網上的,大多數的 web 伺服器和使用者**都會支援這個規範 (順便說一句,email 附件的型別也是通過 mime type 指定的)。

當然,處理本地的檔案,在沒有人告訴瀏覽器某個檔案的 mime type 的情況下,瀏覽器也會做一些預設的處理,這可能和你在作業系統中給檔案配置的 mime type 有關。比如在 windows 下,開啟登錄檔的「hkey_local_machinesoftwareclassesmimedatabasecontent type」主鍵,你可以看到所有 mime type 的配置資訊。

瀏覽器處理 xhtml 和 html 有什麼區別?

html 的語法過於隨意了,有許多簡寫,標記不匹配的複雜情況,同時長期 web 發展下來積累下來了許多錯誤的用法——比如乙個文件裡完全沒有 標記——但瀏覽器還是得支援它,可想而知,為了支援這些「tag soup」——也就是我們所說的那些,亂成一鍋粥的標籤——瀏覽器要很費力地去猜測一段標記的意思,努力以使用者期望的形式表達出來。一句話說,雖然 html 4.01 允許你用語義化、結構化的、內容與表現分離的方法來書寫標記,但由於它沿襲了 html 這種格式,使得瀏覽器對於凡是 mime type 為「text/html」的檔案,都得採用一種非常費勁的方法去處理,這對於 web 的發展是很不利的。

創造 xhtml,很大一部分原因正是要通過 xml 重新嚴格地規範一遍標記,讓這些使用者**可以以一種更簡便的方式來解析這些標記。因此,xhtml 這種新的格式,天生就要求內容的發布者必須以嚴格的方式來標記自己的文件。

當然,xhtml 對於內容提供者也有好處,此處先不展開,詳見下文。

這正是造成我們不得不給 xhtml 文件標以 text/html 的原因 1,實際上,目前 web 上 95% 的 xhtml,都是扮成 html 的 xhtml (包括 w3.org),瀏覽器 (包括我們引以為傲的 mozilla) 壓根沒有用 xml 解析器去解析那些 xhtml,而是沿用處理標籤湯的老辦法。

這個時候你會問了,在我看起來,老辦法顯示得很好啊,幹嗎為此感到頭疼呢?問題正是出在「看起來」這個詞上,實際上,一些細微但是不可忽略的差別仍然存在。

可是 w3c 還是不斷要求我們以正確的 mime type 來提供 xhtml,為什麼呢?因為我們要用到 xhtml 提供的好處啊,只有被認為是 xhtml 或者 xml 文件的東西,瀏覽器才會啟用這些「好處」,比如你可以試著在 ie 中開啟 xhtml 中嵌入的 mathml 看看,沒有效果,它被當作 html 一樣顯示。

現在的問題是,既然把文件設定為真正的 xhtml 是如此的麻煩,會帶來如此多的問題,幹嗎不舒舒服服地呆在 html 上呢?為什麼要往 xhtml 過渡?xhtml 提供的「好處」值得我們為此付出如此多的代價嗎?

xhtml 的優勢

最重要的兩點是:

除了前面討論的使用者**易於處理以外,實際上,大量的基於 xml 的工具,許多對 xml 有很好支援的程式語言,都能夠方便地解析你的文件,從中提取出需要的資訊。當然,也包括搜尋引擎。

你可以利用 xhtml 繼承自 xml 的良好的擴充套件性,比如在 xhtml 中嵌入 rdf 資料,描述文件的語義資訊;加入 mathml 標記,描述數學公式;加入 svg 標記,使用可伸縮向量圖型。

顯然,如果文件連 well-formed 都做不到,優點 1 對你是無效的,就算有效吧,就個人來說,其實也沒有多少人對 xhtml 進行 xml 解析,因為能做到的,大概也就是從 h1、h2 這些標記中讀出文件結構一類的功能,實在沒什麼大用處。

而第二點對大多數內容提供者來說,太遠了,rdf 是什麼東東?加入 rdf 資訊有什麼好處?沒多少人知道或者有興趣知道;mathml?這是可擴充套件性目前用得最多的地方,因為很多 mathml 閱讀和編輯工具已經普及了,但如果你不是個成天在公式中打轉的科學工作者,多半對此也沒有興趣;svg 呢?倒是挺有意思,但目前顯然沒有獲得廣泛的應用,事實上,日後能否獲得廣泛的應用,還要看它能不能在與 flash 的競爭中活下來:成為標準的東西被人拋棄也是常有的事。

總結起來,所有這些優點幾乎都是一些空頭支票,一些未來才能實現甚至未來都不知道能不能實現的東西,比如說你現在在開發乙個 cms 系統,如果現在都已經不能保證裡面的內容 well-formed,有什麼理由說以後,資料越來越多以後,反而會回頭去把錯誤的標記一一改正?

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

那麼,是否這就是說,xhtml 幾乎就是乙個雞肋了 ?

xhtml 啊 xhtml

行文至此,已經陷入了僵局,其實我本無意把 xhtml 說得那麼差的,但問題是我每句說的都是實話呀,也沒有忽略什麼有必要提到的因素,但反覆查考,總結起來還是那一句話:xhtml 其實是乙個帶一點理想主義的,對普通使用者來說,相比 html 4.01 並沒有顯見優勢的格式。

於是我們就陷入了兩難困境:刨掉那些花言巧語,沒有任何顯見的優點吸引我們我們轉向 xhtml,但如果我們永遠躺在 html 4.01 舒服的被窩裡,web 豈不是永不前進了?

答案還是個問號。

如果把他們人格化:我覺得「使用者」大概是個剃頭挑子一頭熱的傢伙,他們為自己的 xhtml 頁面在一切瀏覽器上都如此美好而感到滿意,卻渾不知道背後其實還是 html,自己沒沾著一點「x」的好處。

這時標準制定者——他一定是個理想主義者——也不滿意,因為使用者其實還是在以 html 的方式來寫 xhtml 的,根本沒準備好向 xhtml 進行轉變的決心,標準制定者一心領著大家往 web 美好的未來遠航,卻發現無論是使用者還是瀏覽器廠商都在盡給他添亂。

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

你可能會對此感到沮喪,但這的確是目前 web 中的事實,承認也好不承認也好,確定乙個目標,然後艱難而執著地前行,大概是我們這些標準推廣者唯一能做的。

資料引用:

選擇總是兩難的

我們的人生就是一部 每當我們進行乙個行動時,我們就在作出選擇的同時,毀滅選擇的多樣性。你現在住的房子是你自己選的嗎?如果是的話,以後你看到位置 房型更好的房子,你已經難以再選擇了。你現在的愛人是你自己選擇的嗎?好的,以後遇到更可心的異性,你得知道,是你自己堵塞了選擇機遇。於是,我們永遠都面對著這個兩...

老媽老婆兩難全

老媽似水,老婆似火,水火難相容,關心老媽就會撲滅嫉妒之火,遷就老婆就會烤乾養育之水,我每天就生活在這水深火熱之中。老媽給予我生命,哺育我 為我們的成長含辛茹苦,嘔心瀝血,歷盡艱辛,當我生病時,老媽日夜守候在我身邊,尋醫問藥。當我寒冷時,老媽挑燈夜縫為我做禦寒衣,噓寒問暖。當我受挫時,老媽苦口婆心為我...

折磨於兩難中

本來已經下定決心把東西做好再走,但是今天早上聽了他們的話,他們為什麼可以那麼不負責任的說話呢?覺得很鬱悶,自己真的太傻傻傻了,n個傻都不夠用了 為什麼這裡會是這樣的?真正想做點事情的,卻感覺一直被排擠走?他們說的話是什麼意思?聽我安排?老闆給我權利讓我安排了嗎?不是我不想安排 上一次,以為都把權利下...