【发布时间】:2011-03-17 09:32:11
【问题描述】:
我认为我应该发送“text/xml”,但后来我读到我应该发送“application/xml”。有关系吗?有人能解释一下区别吗?
【问题讨论】:
标签: xml mime-types sitemap xml-sitemap
我认为我应该发送“text/xml”,但后来我读到我应该发送“application/xml”。有关系吗?有人能解释一下区别吗?
【问题讨论】:
标签: xml mime-types sitemap xml-sitemap
此处的其他答案解决了 XML 响应的正确 Content-Type 是什么的一般问题,并得出结论(与 What's the difference between text/xml vs application/xml for webservice response 一样)text/xml 和 application/xml 都是允许的。但是,没有一个解决是否有任何特定于站点地图的规则。
回答:没有。站点地图规范为 https://www.sitemaps.org,使用 Google site: 搜索,您可以确认它不包含单词或短语 mime、mimetype、content-在任何地方键入、application/xml 或text/xml。换句话说,它完全没有提及应该使用什么Content-Type 来提供站点地图。
在站点地图规范中没有任何评论直接解决这个问题的情况下,我们可以放心地假设在选择任何其他 XML 文档的 Content-Type 时适用相同的规则 - 即它可能是 text/xml 或application/xml.
【讨论】:
如果 charset 参数被省略,difference between text/xml and application/xml 是默认的字符编码:
Text/xml 和 application/xml 在 charset 时的行为不同 参数未明确指定。如果默认字符集(即 文本/xml 的 US-ASCII)由于某种原因(例如,糟糕的网络)不方便 服务器),application/xml 提供了一种替代方法(请参阅“可选 参数”的应用程序/xml注册第3.2节)。
对于text/xml:
符合 [RFC2046],如果接收到 text/xml 实体 charset 参数省略,MIME 处理器和 XML 处理器 必须使用“us-ascii”[ASCII] 的默认字符集值。在案件 其中 XML MIME 实体通过 HTTP 传输,默认 charset 值仍然是“us-ascii”。
如果收到应用程序/xml 实体,其中字符集 参数被省略,没有提供关于 MIME Content-Type 标头的字符集。符合 XML 处理器必须遵循 [XML] 第 4.3.3 节中的要求 直接解决了这种意外情况。但是,MIME 处理器 如果不是 XML 处理器,则不应假定默认字符集 应用程序/xml 实体中省略了 charset 参数。
所以如果charset参数被省略,text/xml的字符编码是US-ASCII,而application/xml是字符编码可以在文档本身中指定。
现在互联网上的一条经验法则是:“严格控制输出,宽容输入。”这意味着在通过 Internet 传输数据时,请确保尽可能地满足标准。但是在通过 Internet 接收和解释数据时构建一些机制来忽略错误或猜测。
所以在你的情况下只选择两种类型之一(我推荐application/xml)并确保正确指定使用的字符编码(我建议使用各自的默认字符编码来播放安全,所以在 application/xml 的情况下使用 UTF-8 或 UTF-16)。
【讨论】:
根据经验,要让所有 Web 服务器、代理和客户端浏览器正确处理您的文档,最安全的方法可能是:
就 RFC 3023 规范而言,某些浏览器无法正确实现,内容类型的主要区别在于客户端应该如何处理字符编码,如下所示:
对于 application/xml、application/xml-dtd、application/xml-external-parsed-entity 或 application/xml 的任何一种子类型,例如 application/atom+xml、application/rss+xml 或 application/ rdf+xml,按照这个顺序确定字符编码:
对于text/xml,text/xml-external-parsed-entity,或者像text/foo+xml这样的子类型,忽略文档内XML声明的encoding属性,字符编码为:
大多数解析器没有实现规范;他们忽略 HTTP Context-Type,只使用文档中的编码。有这么多格式不正确的文档,这种情况不太可能很快改变。
【讨论】:
两者都很好。
text/xxx 意味着如果程序不理解 xxx,则将文件以纯文本形式显示给用户是有意义的。 application/xxx 表示显示没有意义。
请注意,这些内容类型最初是为电子邮件附件定义的,后来在网络世界中使用。
【讨论】:
text/xml 用于在没有进一步处理的情况下以文本形式呈现对人类有意义的文档,application/xml 用于其他所有内容
每个 XML 实体都适合与 application/xml 媒体一起使用 无需修改即可输入。但这并没有利用以下事实: 在许多情况下,XML 可以被视为纯文本。 MIME 用户代理 (和 Web 用户代理)没有明确支持 application/xml 会将其视为 application/octet-stream,因为 例如,提供将其保存到文件中。
表示应将 XML 实体视为纯文本 默认情况下,使用 text/xml 媒体类型。这限制了编码 在 XML 实体中使用到那些与 [RFC-2045] 中描述的文本媒体类型的要求和 [RFC-2046],例如 UTF-8,但不是 UTF-16(HTTP 除外)。
【讨论】:
text/html,首选的 XHTML MIME 类型是application/xhtml+xml。
text/html已经存在很长时间了,现在改有点晚了。