2012-01-24 62 views
0

我在想,如果我運行此代碼會發生什麼:設置多MIMETYPES

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>MimeType Tester</title> 
    <meta charset="utf-8" /> 
    <meta content="text/xml; charset=utf-8" http-equiv="content-type" /> 
    <meta content="text/html; charset=utf-8" http-equiv="content-type" /> 
</head> 
<body> 
</body> 
</html> 

我的內容會被解析爲XML或HTML?都?其他?

另外我有一個JS代碼,設置MIME類型兩次:

req = new XMLHttpRequest(); 
req.overrideMimeType('text/xml'); 
req.overrideMimeType('text/html'); 

我的內容會被解析爲XML或HTML?都?其他?

這兩個代碼之間有差異嗎? 結果是一樣的嗎?

+0

我不認爲這是有效的。提供的內容類型不能同時爲這兩種類型。結果可能會取決於實施。 – Oded

+0

後來的statemnt不會覆蓋? –

+0

我不認爲行爲是定義的。它不在規範中,所以會依賴於瀏覽器。 – Oded

回答

2

首先取得HTML。除非服務器解釋meta http-equiv=content-type設置並將其轉換爲真正的HTTP標頭(HTML4說的目的是meta http-equiv,但服務器幾乎從不這樣做),那麼HTTP內容類型不會受到影響,而且它不是meta http-equiv設置(或doctype),用於確定HTML或XML解析器是否被調用。

所以這通常意味着將調用HTML解析器,但在您的問題外部的配置或應用程序代碼可能會導致瀏覽器以不同的方式處理它。 (作爲XML或純文本,或二進制數據或其他東西)

至於JS,我不知道,也沒有測試過它,但可以認爲沒有理由爲什麼第二個overrideMimeType調用不會替換第一個呼叫的設置,並且請求將以text/html的內容類型結束。這似乎是規範要求的效果:http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-overridemimetype%28%29-method,但它沒有明確涵蓋這種情況。

服務器如何解釋從瀏覽器發送的MIME類型和內容完全取決於服務器上運行的代碼。可能需要考慮mime類型來選擇解析器,它可能會忽略它,或者完全相反。

+0

這就是我對JS部分的想法。感謝您的提問。 –