【问题标题】:Set multi MimeTypes设置多个 MimeType
【发布时间】:2012-01-24 10:06:01
【问题描述】:

我想知道如果我运行这段代码会发生什么:

<!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?两个都?其他?

我还有一个设置 mimetype 两次的 JS 代码:

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

我的内容会被解析为 XML 还是 HTML?两个都?其他?

这两个代码有区别吗? 结果一样吗?

【问题讨论】:

  • 我不认为这是有效的。提供的内容类型不能同时属于这两种类型。结果可能取决于实现。
  • 后面的statemnt没有覆盖?
  • 我认为行为没有定义。它不在规范中,因此取决于浏览器。
  • 那么javascript呢?第二个对第一个的作用不就和第一个对 HTML 的作用一样吗?
  • 同样,可能依赖于实现。

标签: javascript html mime-types content-type meta-tags


【解决方案1】:

首先获取 HTML。除非 服务器 解释 meta http-equiv=content-type 设置并将其转换为真正的 HTTP 标头(HTML4 说这是 meta http-equiv 的目的,但服务器几乎从不这样做)然后 HTTP 内容类型不是受影响的,是决定是否调用 HTML 或 XML 解析器的元 http-equiv 设置(或 doctype)。

这通常意味着 HTML 解析器将被调用,但您的问题外部的配置或应用程序代码可能会导致浏览器以不同方式处理它。 (作为 XML,或纯文本,或二进制数据或其他)

至于JS,我不知道也没有测试过,但是想不出为什么第二个overrideMimeType调用不会替换第一个调用的设置,并且请求会以a text/html 的内容类型。这似乎是此处规范要求的影响:http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#the-overridemimetype%28%29-method 但它没有明确涵盖这种情况。

服务器如何解释从浏览器发送的 mime 类型和内容完全取决于服务器上运行的代码。它可能会考虑 mime 类型来选择解析器,它可能会忽略它,或者做一些完全相反的事情。

【讨论】:

  • 这就是我对 JS 部分的想法。感谢您的引用。
猜你喜欢
  • 2013-03-15
  • 2011-03-07
  • 2019-01-03
  • 2021-12-26
  • 2011-10-15
  • 1970-01-01
  • 2013-09-21
  • 2018-08-10
  • 1970-01-01
相关资源
最近更新 更多