使用哪种MIME类型来表示RSS订阅源?

159

哪种MIME类型更适合确保与RSS阅读器和其他抓取工具兼容?

选项似乎有:

  • text/xml
  • text/rss+xml

有趣的是Stackoverflow使用的是text/html。

8个回答

267

11
我同意这是正确的类型,然而它似乎并不被网页浏览器很好地理解。看起来(可悲的是)text/xml现在成为了事实上的标准。 - Samuel EUSTACHI
2
@SamuelEUSTACHI,你是对的,而被接受的答案可能不是最好的选择,以确保兼容性,正如所要求的那样。 Tim Bray在2003年曾说过:“无论如何,我认为重要的是社区团结起来,决定使用什么媒体类型并开始使用它。”今天:请参见下面我的答案,证明几乎所有流行的源都使用“text/xml”。 - Kai Carver
@SamuelEUSTACHI - 这不仅是一个“事实上”的标准,而且是IETF和IANA的实际标准--RFC 6838指向在IANA注册事项,并且该注册表--https://www.iana.org/assignments/media-types/media-types.xhtml--没有`application/rss+xml`。提交了一份草案,我不知道为什么它没有被接受的历史,但我看到一些迹象表明它被认为规范不清。无论如何,我认为这个答案是“好”的,但也不符合技术标准--各个地方都有争议是否支持它。 - lindes
1
目前,如果我使用application/rss+xml,Google Chrome浏览器不会美化在选项卡中浏览的XML源代码,但如果我使用text/xml,它会进行美化。只是说一下。 - DrLightman

44

其他评论者指出单一正确的 MIME 类型是 application/rss+xml

然而,如果您正在为客户端设置接受标头,则

Accept: application/rss+xml, application/rdf+xml;q=0.8, application/atom+xml;q=0.6, application/xml;q=0.4, text/xml;q=0.4

可能是一个不错的选择,因为它声明可以接受 RSS、Atom 和 XML(以偏好降序排列)。


3
接受头部顺序告诉服务器使用哪种内容。服务器将查看它是否能够提供第一个,然后是第二个等等...这就是为什么“application/rss+xml”作为最佳首选项,“text/xml”作为最后的备用选择是不错的原因。 - Robert MacLean
5
实际上,Accept头中元素的顺序并不重要。偏好可以用q参数来指示,因此为了达到期望的效果,最好发送Accept: application/rss+xml, application/rdf+xml, application/atom+xml, application/xml;q=0.9, text/xml;q=0.8,它的意思是“首选任何正确的提要MIME类型,如果无法提供,则首选application/xml,如果仍然无法提供,则首选text/xml,否则,请给我你有的”。 - Magnus Hoff
1
就此而言,我尝试了下面我的回答中流行的提要示例所建议的Accept头的两种形式,它们都返回了text/xml。我使用了以下命令:curl -s -H 'Accept: application/rss+xml, application/rdf+xml, application/atom+xml, application/xml;q=0.9, text/xml;q=0.8' -H 'Content-Type: application/rss+xml' -I $f - Kai Carver
@KaiCarver 我一直在使用ASP.NET Core 3.1 Web API + Angular 9构建一个新项目。我需要生成一个RSS订阅,当与其他网站的输出进行比较时,我意识到正确的Content-Type应该是text/xml。然而,在描述节点中的HTML内容被转义时,设置Accept头值解决了这个问题。谢谢,干杯! - Nexus

16

这里有一个实用的答案:无论“正确”的答案是什么(显然对此有争议),text/xml 是目前在野外流行的几乎所有热门Feeds使用的类型。

以下是我检查过的一些:

$ for f in \
  https://feeds.feedburner.com/TechCrunch/ \
  http://feeds.bbci.co.uk/news/video_and_audio/news_front_page/rss.xml \
  http://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml \
  https://daringfireball.net/thetalkshow/rss \
  http://www.npr.org/rss/podcast.php?id=381444908 \
  http://feeds.serialpodcast.org/serialpodcast \
  http://podcasts.joerogan.net/feed \
  https://feeds.feedburner.com/thetimferrissshow \
  http://feed.thisamericanlife.org/talpodcast ; do \
  curl -s -I $f | fgrep -i Content-Type: ; done
content-type:text/xml; charset=UTF-8
Content-Type: text/xml
Content-Type: text/xml
Content-Type: text/xml;charset=UTF-8
Content-Type: text/xml;charset=UTF-8
Content-Type: text/xml; charset=UTF-8
Content-Type: text/xml; charset=UTF-8
content-type:text/xml; charset=UTF-8
Content-Type: text/xml; charset=UTF-8

因此,您可以确信常用的RSS客户端会正确解释text/xml


1
还没有检查其他网站,但bbci.co.uk现在正在发送application/rss+xml。 - Jules
1
这个回答似乎...不完全是精心挑选的,但至少是不完整的。而且它已经过时了。在curl的命令行中添加一个-L选项,我现在得到了5个 text/xml,2个 application/xml,1个 text/html和1个 application/rss+xml。对于https://savage.love/feed/,我也会获得`application/rss+xml`,对于http://feeds.serialpodcast.org/serialpodcast,我会获得`application/xml`--虽然它作为`<link rel="alternate" type="application/rss+xml" title="Podcast" href="http://feeds.serialpodcast.org/serialpodcast"/>` 进行链接等等。所以,我认为“几乎全部”这个说法并不公平。 - lindes

11

正确的是 application/rss+xml

兼容的是 application/xml

根据 W3C:

RSS 源应该使用 application/rss+xml(RSS 1.0 是 RDF 格式,因此也可以使用 application/rdf+xml)。Atom 源应该使用 application/atom+xml。或者,为了与广泛部署的 Web 浏览器兼容,这些源之一可以使用更常见的 XML 类型——最好使用 application/xml。

https://validator.w3.org/feed/docs/warning/UnexpectedContentType.html


我认为application/rss+xml没有任何实际的兼容性问题,因此使用xml媒体类型是没有意义的。 - Mikko Ohtamaa
@MikkoOhtamaa 旧版浏览器可能会渲染不正确,因为它们不识别 MIME 类型。使用 application/xml,几乎所有浏览器都会显示 XML 文档树而不是纯文本/HTML。 - nggit
但是你首先不是使用浏览器来呈现RSS,而是使用RSS阅读器。 - Mikko Ohtamaa
点赞,总是很好看到W3C对一个情况的说法,即使它不一定是完美的建议(如果这样的东西存在的话)。 - HoldOffHunger

3

如果您希望确保您的RSS订阅与RSS阅读器和其他抓取工具兼容,请使用MIME application/rss+xml。这是我使用的方法。


1

你可以使用text/xml,但正确的MIME类型应该是application/rss+xml


4
“application/xml”比“text/xml”更受欢迎,因为XML不遵循正常的文本内容编码规则。它可以将其编码嵌入其数据中,如果代理尝试盲目转换文本,这将导致问题。换句话说,代理被指示按字节保留数据。 - Zenexer

0
还有JSON源: application/feed+json

-2

1
并非所有的MIME类型都在IANA注册。更重要的是,该文档中没有任何关于RSS使用的建议。 - Ruben Verborgh
RSS是XML。它建议了XML的使用。 - Monkey Code
2
那个论点不足够。RSS也是RDF。XML也是文本。因此,按照这种推理,RDF或文本MIME类型也可能很好。然而,问题在于,并非所有的XML文档都是RSS。因此,通用的XML类型不足以明确地识别RSS。 - Ruben Verborgh
@RubenVerborgh:“该文档中没有任何暗示使用RSS”的内容。我使用了Ctrl + F,然后输入了application/atom,它找到了application/atom+xml作为MIME类型之一。我不知道其他命名空间的情况。但是,无论命名空间是什么,我认为application/rss+xml是2.0版本最好的选择。 - MaxxiBoi
application/rss+xml从未在IANA注册。该申请曾于很久以前过期。 https://www.ietf.org/archive/id/draft-nottingham-rss-media-type-00.txt这也是Debian不正确地使用RSS MIME类型的原因 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605250 - tcit
这似乎是一个有争议的观点(和答案)。从我所搜集到的信息来看,(a)在我们接受IETF和IANA的权威性的范围内,您是正确的,即application/rss+xml不是注册类型,因此不是“正确”的;(b)包括W3C在内的各种组织仍然推荐它(例如,请参见https://validator.w3.org/feed/docs/warning/UnexpectedContentType.html);(c)我认为之所以没有被接受是因为起草规范的质量不够好。也许需要重新制定/提交??尽管希望情况不是这样,但还是点赞。 - lindes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接