RSS 阅读器如何知道提要已更新?

问题描述 投票:0回答:6

刚刚通过 youtube 了解这一点,但无法找到我的问题的答案:读者如何知道有更新。

就像黑莓中的 Push 一样吗?

rss push
6个回答
46
投票

RSS 是一种文件格式,实际上并不知道有关它从何处获取条目的任何信息。答案实际上是:“http 请求如何仅从服务器获取最新结果”,答案是Conditional GET source。 Http 还支持条件 PUT

这是一篇关于利用http的这个特性来专门支持rss黑客的文章。


20
投票

RSS 是一种拉式技术。读者时不时地重新获取 RSS 提要(例如每小时两次,或者如果读者知道这是经常更新的提要,则更频繁)。

该提要通过常规 HTTP 提供,并由一个简单的 XML 文件组成。它总是从同一个 URL 获取。


13
投票

它只是定期检查提要更新。

最近有一个名为 pubsubhubbub 的新协议可以将 feed 推送到监听器。但这需要出版商的支持。

这里是支持实时RSS推送的网络服务列表,包括Google Reader、Blogger、FeedBurner、FriendFeed、MySpace等


12
投票

让我们总结一下:

  • 通常,客户端通过轮询知道 RSS feed 已更新,即定期拉取(对 feed URL 进行 HTTP GET 请求)
  • 在网络上不存在推送,至少在 HTTP 中不存在,直到 HTML5 websocket 得到修复。
  • 但是,一些博客框架(例如 Wordpress、Google 等)现在支持 pubsubhubbub 约定。在此模式下,您将“订阅”RSS 流的更新。 “中心”将调用您网站上的 URL(回调 URL)来向您发送更新:这就是推送。

推或拉,在这两种情况下,您仍然需要编写一些代码来更新站点、数据库或存储/显示它的任何地方的 RSS 列表。

而且,作为一个附带问题,没有必要在每次拉取时请求整个 XML 来查看内容是否已更改:使用不链接到 RSS 的标准,但对整个 HTTP 协议是全局的(etag 和最后一个) -modified headers),您可以知道 RSS 页面在给定日期之后是否被修改,并且仅在修改时获取整个 XML。


5
投票

这是一个拉力。这就是为什么您必须配置阅读器刷新提要的频率。


0
投票

如果您查看 google rss feed,它有最后生成的日期

例如

<lastBuildDate>Fri, 27 Sep 2024 11:15:17 GMT</lastBuildDate>

<lastBuildDate>Fri, 27 Sep 2024 11:18:31 GMT</lastBuildDate>

<lastBuildDate>Fri, 27 Sep 2024 11:23:16 GMT</lastBuildDate>

<lastBuildDate>Fri, 27 Sep 2024 11:25:24 GMT</lastBuildDate>

通常会设置一个 cron 作业来根据提要项目的更新或添加频率等来查询提要。

现在我猜这个资源可以被缓存,但据我所知,提要每隔几分钟就会更新一次。

有趣的是提要中的项目可能会有所不同。一分钟内某个项目可以包含在 feed 中,但不能保证下次获取 feed 时该项目仍然存在。换句话说,饲料生成似乎是为了速度而不是一致性而设计的。我见过一些例子,其中一个项目在那里,然后又消失了,然后又出现了。

使用 feed 的另一个挑战是,可以通过一个或多个 guid 在 feed 中访问单个资源或 URL。例如有时会使用或不使用查询字符串来访问资源。如果 google 对带有或不带有查询字符串的页面进行索引,它可能会生成多个具有不同 guid 的 feed 项,指向相同的资源。

© www.soinside.com 2019 - 2024. All rights reserved.