RSS 和 Atom 都是用 XML 写「这个站点最近更新了什么」。 同一批三条数据,RSS 2.0 写出来 675 字节,Atom 1.0 是 778 字节——Atom 更啰嗦, 但每条必须有全局唯一的 id,时间必须带时区。
上一节说完 XML 的语法,这一节看它最普及的一个用途:让程序订阅网站更新。
一、一份给程序读的「最近更新」
网站更新了,读者怎么知道?靠人天天去看是不现实的。 RSS 的办法是:站点自己发一份 XML,列出最近若干条更新,读者用一个「阅读器」定期来取。 所以这份 XML 里必须有:站点叫什么、最近有哪些条目、每条的标题、链接、时间、摘要。 全是结构化字段,程序一眼就能取出来排成列表。 这也解释了它为什么用 XML 而不是 HTML:读者是程序,不是人。 程序不需要好看的排版,只需要确定的字段名。
二、两套字段,对不上
Demo 里同一批三条数据,RSS 2.0 写出来 675 字节,Atom 1.0 写出来 778 字节。
多出来的一百来字节,主要在时间格式和 id 上。
字段对应关系大致是:channel/title 对 feed/title,channel/item 对 feed/entry,
item/pubDate 对 entry/updated,item/description 对 entry/summary。
有一处不一样很关键:链接。RSS 把它写在 <link> 元素的文字里,Atom 写在 href 属性里。
所以同样一个地址,两种取法。
另一处更关键:Atom 强制每条有全局唯一的 id。
RSS 2.0 没有这个概念,只能靠链接代替——链接一改,阅读器就会当成一条新内容重复显示。
这一条是 Atom 出现的主要理由之一。
三、Atom 为什么要另起炉灶
RSS 有好几个分支:0.9x、1.0、2.0,历史上分岔过,规范措辞也有含糊的地方。 Atom 想做的是「重新写一份更严谨的」:用 XML 命名空间、强制 id、时间用 RFC 3339 并带时区。 措辞也更明确:字段是「必须有」还是「可以有」,一条条写清楚,不像早期 RSS 那样要靠实践摸索。 结果是两个都活下来了:播客圈几乎全用 RSS(播客客户端只认它),而一些聚合服务同时支持两种。 这场标准之争没有赢家,只有并存。
四、它今天怎么样了
RSS 阅读器在 2013 年谷歌阅读器关停时被很多人判了死刑,但它没死:Feedly、Inoreader 这些还在, 播客全靠它。 变化的是主流入口:社交平台的「关注流」和算法推荐接管了「我该看什么」, RSS 退回成一种「我要自己挑源」的工具。 这一点和 HTTP 的处境有点像:不显眼、没人在意,但底下一直有人用。 判断一个技术死没死,看的是「还有没有人在生产」,不是「有没有话题」。
五、动手 Demo:同一批三条数据,写两种格式
用同样的三条内容,各拼一份 RSS 2.0 和 Atom 1.0,分别解析、取字段、量字节, 再把两边的字段列成对照表。
# RSS 2.0
<rss version="2.0"><channel><title>自学笔记</title>
<item><title>…</title><link>…</link>
<description>…</description><pubDate>2026-10-20</pubDate></item>
</channel></rss>
# Atom 1.0
<feed xmlns="http://www.w3.org/2005/Atom"><title>自学笔记</title>
<entry><title>…</title><link href="…"/><id>…</id>
<updated>2026-10-20T00:00:00Z</updated><summary>…</summary></entry>
</feed>
实跑输出:
--------------------------------------------------------------------
RSS 与 Atom:同一批数据,两种写法
--------------------------------------------------------------------
RSS 2.0
根元素 rss(version=2.0)
频道标题 自学笔记
条目数 3 个
图解 HTTP 读完了 2026-10-20 https://example.com/p/1
WebSocket 握手 2026-10-21 https://example.com/p/2
WebDAV 的 207 2026-10-22 https://example.com/p/3
字节数 675 字节
Atom 1.0
根元素 {http://www.w3.org/2005/Atom}feed
它是 带命名空间的 XML
频道标题 自学笔记
条目数 3 个
图解 HTTP 读完了 2026-10-20 https://example.com/p/1
WebSocket 握手 2026-10-21 https://example.com/p/2
WebDAV 的 207 2026-10-22 https://example.com/p/3
字节数 778 字节
含义 RSS 2.0 的写法 Atom 1.0 的写法
标题 channel/title feed/title
一条内容 channel/item feed/entry
时间 item/pubDate entry/updated
链接 item/link(元素文字) entry/link(href 属性)
摘要 item/description entry/summary
唯一标识 靠 link 代替 entry/id(必须有)
Atom 的三点改变最关键:时间必须是 RFC 3339 格式(带时区)、
两边都解析出 3 条,字段也都取到了。
RSS 的根元素是 rss,Atom 的根元素是 {http://www.w3.org/2005/Atom}feed——那个大括号是命名空间,
说明 Atom 是带命名空间的 XML。
675 字节 对 778 字节。Atom 多了 103 字节,多的是每条那个 id 和更长的 updated 时间戳。
读 Atom 的时候代码里必须带命名空间前缀 {http://www.w3.org/2005/Atom}entry,
否则 find('entry') 一个都找不到。这是新手最容易踩的坑。
id 那一栏值得单独看:RSS 那边写的是「靠 link 代替」,Atom 那边是「必须有」。
一条内容改了标题,RSS 阅读器可能当成新条目,Atom 靠 id 就不会——这就是那 103 字节买到的东西。
30 秒实验
- 给 Atom 那条 entry 的 id 换一个值,看阅读器(或解析脚本)会当成新条目还是同一条。
- 把
updated的时间去掉时区,再用严格的解析器试一遍。 - 想一想:如果你要做播客,为什么只能用 RSS 而不是 Atom?
常见误区
- 「RSS 和 Atom 是同一个东西的两种叫法」——两个不同的规范,字段名都不一样。
- 「Atom 比 RSS 新所以更好」——各有场景,播客生态实际只认 RSS。
- 「RSS 已经死了」——阅读器和播客还在用,只是不再是主入口。
自测三问(点开对答案)
1. RSS 和 Atom 是干什么用的? —— 用 XML 发布站点的最近更新,供程序订阅和读取。 2. Atom 相比 RSS 2.0 最关键的加强是什么? —— 每条必须有全局唯一的 id,时间必须用带时区的 RFC 3339 格式。 3. 解析 Atom 时最容易踩的坑是什么? —— 它带命名空间,查元素必须带 `{...}` 前缀。XML 传数据挺好,就是啰嗦。有人从 JavaScript 里抠出一小套语法,结果火了。
- ☐ (本节完,下一节 10.4.3 JavaScript衍生的轻量级易用JSON)