為什麼 HTTP header 中 Content-Type 這一條目的寫法是 charset 在 content 的屬性裡面?

為什麼是這樣寫:&

而不是這樣寫:&


http-equiv 這個屬性對應 HTTP response headers 裡面的項目,它也是因此而得名。其初衷是讓不能(比如沒有許可權)設定伺服器 header 的站點可以通過它來告知瀏覽器一些頁面內容的相關信息。而 HTTP header 裡面,Content-Type 這一條目的寫法就是 "text/html; charset=utf-8"。

參見 http://reference.sitepoint.com/html/meta/http-equiv


首先,HTML meta的定義是有固有格式的。

&

其格式類似於名值對。所以你不能加一個屬性。所以我猜你可能又想問,那能不能像下面這樣拆成兩條?

&

&

答案也是不能。

從設計的角度來講

因為「text/html; charset=utf-8」 這一串信息所描述的就是一個屬性:內容的格式(即Content-Type)。

XML的設計,並不是為了數據存儲與查詢,而是為了規範、合理、統一地描述數據。所以XML的屬性設計與資料庫表的欄位設計並不一樣。從資料庫表設計的角度,把text/html; charset=utf-8拆成兩個甚至三個欄位都是合理的。但是對於XML而言並不是這樣。這三個屬性的作用很明確而且無歧義:保證數據接受者能正確解析其內容。單獨拿出來任何一個屬性都做不到這一點。那麼對於XML而言,它們就應該被放在一起。

從標準與歷史的角度來講

另外,第一版的HTML標準,出現在1993年:http://www.w3.org/MarkUp/draft-ietf-iiir-html-01.txt

Content-Type這個東西的出現,卻可以追溯到1988年:http://tools.ietf.org/html/rfc1049

HTML沒有道理也不應該不去遵守現有標準。(因為沒有人會認可一個不認可其它標準的標準)


推薦閱讀:

大家是如何知道 nctype="multipart/form-data" 的功能是以二進位上傳文件的?
如何學好 HTML ?
學完了html和css怎麼做靜態網頁啊,沒有頭緒,初學者都是這樣的么,感覺手拿筷子,不知道怎麼用?
第一次看HTML教程是怎樣一種體驗?
普通文檔流的數字串遇到浮動塊為什麼不自動換行而是直接流到浮動塊底部的一行?

TAG:前端開發 | HTML | Web標準 | HTTP |