我想知道如果运行以下代码会发生什么:
<!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代码,可以设置两次mimetype:
req = new XMLHttpRequest();
req.overrideMimeType('text/xml');
req.overrideMimeType('text/html');
我的内容将被解析为XML还是HTML?二者都另外
两种代码之间有区别吗?结果是一样的吗?
首先获取HTML。除非服务器解释meta http-equiv=content-type
设置并将其转换为真正的HTTP头(HTML4说这是meta http-equiv
的目的,但服务器几乎从不这样做),否则HTTP内容类型不会受到影响,也就是说,决定是否调用HTML或XML解析器的不是元HTTP equiv设置(或doctype)。
因此,这通常意味着HTML解析器将被调用,但问题外部的配置或应用程序代码可能会导致浏览器以不同的方式处理它。(作为XML、纯文本、二进制数据或其他内容)
至于JS,我不知道也没有测试过,但我想不出为什么第二个overrideMimeType调用不会取代第一个调用的设置,并且请求会以text/html
的内容类型发出。这似乎是规范要求的影响:http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-overridemitype%28%29方法,但它没有明确涵盖这种情况。
服务器如何解释浏览器发送的mime类型和内容完全取决于服务器上运行的代码。它可以考虑mime类型来选择解析器,也可以忽略它,或者做一些完全相反的事情。