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