我应该为XML网站地图发送什么Content-Type值?


128

我以为我应该发送“ text / xml”,但是后来我读到我应该发送“ application / xml”。有关系吗?有人可以解释差异吗?

Answers:


160

如果省略charset参数,则text / xmlapplication / xml之间区别是默认字符编码:

如果未明确指定charset参数,则text / xml和application / xml的行为会有所不同。如果由于某些原因(例如,不良的Web服务器)而使text / xml的默认字符集(即US-ASCII)不方便,则application / xml提供了另一种选择(请参阅第3.2节中的application / xml注册的“可选参数”)。

对于text / xml

符合[RFC2046]的规定,如果接收到省略了charset参数的text / xml实体,则MIME处理器和XML处理器务必使用默认字符集值“ us-ascii” [ASCII]。在通过HTTP传输XML MIME实体的情况下,默认字符集值仍为“ us-ascii”。

对于application / xml

如果接收到省略了charset参数的应用程序/ xml实体,则MIME Con​​tent-Type标头不会提供有关该字符集的信息。合格的XML处理器必须遵循[XML]第4.3.3节中的要求,以直接解决这种情况。但是,如果从应用程序/ xml实体中省略了charset参数,则不是XML处理器的MIME处理器不应采用默认的字符集。

因此,如果省略charset参数,则text / xml的字符编码为US-ASCII,而对于application / xml,则可以在文档本身中指定字符编码。

现在,互联网上的一条经验法则是:“对输出严格,但对输入宽容。” 这意味着在通过Internet传输数据时,请确保尽可能满足标准。但要建立一些机制来忽略错误或猜测何时通过Internet接收和解释数据。

因此,在您的情况下,只需选择两种类型之一(我建议使用application / xml),并确保正确指定所使用的字符编码(我建议使用相应的默认字符编码以安全播放,因此在使用application / xml的情况下)UTF-8或UTF-16)。


24

根据经验,所有Web服务器,代理和客户端浏览器正确处理文档的最安全选择可能是:

  1. 使用应用程序/ xml内容类型
  2. 在内容类型中包括字符编码,可能是UTF-8
  3. 在XML文档本身的编码属性中包含匹配的字符编码。

根据某些浏览器无法正确实现的RFC 3023规范,内容类型的主要区别在于客户端应如何对待字符编码,如下所示:

对于application / xml,application / xml-dtd,application / xml-external-parsed-entity或application / xml的任何子类型,例如application / atom + xml,application / rss + xml或application / rdf + xml ,字符编码按以下顺序确定:

  1. Content-Type HTTP标头的charset参数中给出的编码
  2. 文档中XML声明的encoding属性中给出的编码,
  3. utf-8。

对于text / xml,text / xml-external-parsed-entity或诸如text / foo + xml的子类型,将忽略文档中XML声明的编码属性,并且字符编码为:

  1. Content-Type HTTP标头的charset参数中给出的编码,或者
  2. 美国。

大多数解析器都没有实现规范。他们忽略HTTP上下文类型,而只使用文档中的编码。由于存在大量格式错误的文档,因此短期内不太可能更改。


9

两者都很好。

text / xxx表示如果程序无法理解xxx,则可以以纯文本格式向用户显示文件。application / xxx表示毫无意义。

请注意,这些内容类型最初是为电子邮件附件定义的,之后才在Web世界中使用。


6

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)。

http://www.ietf.org/rfc/rfc2376.txt


仍然有趣的是,首选HTML MIME类型是text/html,首选XHTML MIME类型是application/xhtml+xml
zneak

1
并不是的。text/html已经存在很长时间了,现在更改它有点晚了。
昆汀2010年

1

其他的答案在这里讨论的合适什么的一般问题Content-Type的一个XML响应,并得出结论(如什么是文本/ XML应用VS / XML Web服务为响应之间的差异),这两个text/xmlapplication/xml是允许的。但是,没有人解决是否有特定于sitemap的规则。

答:没有。站点地图规范为https://www.sitemaps.org,使用Google site:搜索可以确认它在任何地方均不包含单词mimemimetypecontent-typeapplication / xmltext / xml。换句话说,Content-Type对于提供站点地图应使用的内容完全没有提及。

如果站点地图规范中没有任何评论可直接解决此问题,我们可以放心地假设,与选择Content-Type任何其他XML文档时一样,适用相同的规则-即它可以是text/xmlapplication/xml

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.