在RSS订阅源的标准结构中,每个内容项都通过item元素来承载,而guid是item下用于标识当前内容项唯一身份的核心属性,它的存在直接关系到订阅客户端对内容的识别和处理逻辑。

guid的基本定义
guid全称为Globally Unique Identifier,即全局唯一标识符,是RSS 2.0规范中定义的可选但强烈推荐使用的item子元素。它的核心作用是给每一个内容项分配一个不会和其他项重复的标识,让订阅客户端可以精准区分不同的内容条目。
按照规范,guid的取值可以是任意字符串,但必须保证在同一个RSS源的所有item中,每个guid的值都是唯一的。如果同一个RSS源中出现两个相同guid的item,订阅客户端会认为这两个是同一个内容的不同版本或者重复内容。
guid的核心作用
1. 避免内容重复推送
这是guid最基础也最重要的作用。订阅客户端在拉取RSS源时,会把已经推送过的item的guid记录下来,下次拉取时如果发现新的item的guid已经在记录中,就不会再给用户推送这条内容,避免用户收到重复的信息。
比如一个博客的RSS源,每发布一篇新文章就会生成一个对应的item,只要这篇文章不删除、不修改标识,它的guid就会一直保持不变,即使用户多次刷新订阅,也不会重复收到这篇文章的推送。
2. 识别内容更新
当内容项发生修改时,如果发布者修改了对应item的guid,订阅客户端会认为这是一个全新的内容项,会重新推送给用户;如果保持guid不变,只修改标题、描述或者发布时间,大部分客户端会认为这是原有内容的更新,会按照更新逻辑处理,比如提示用户这条内容有修改。
3. 跨平台内容关联
在一些内容分发场景中,同一个内容可能会在多个不同的RSS源中出现,如果给这个内容设置相同的guid,订阅客户端就可以识别出这些不同源里的item其实是同一个内容,避免用户在不同订阅源中收到同一个内容的多次推送。
guid的取值规则
guid的取值没有强制的格式要求,但为了保证唯一性,通常有以下几种常见的取值方式:
- 使用内容对应的唯一ID,比如文章的数据库自增ID、UUID等,这是最常用的方式,只要内容的唯一ID不会重复,guid就不会重复。
- 使用内容的永久链接,也就是<link>元素的值,只要链接是内容唯一的访问地址,也可以作为guid使用,此时需要给guid添加isPermaLink属性,值为true。
- 自定义的唯一字符串,比如结合发布时间、内容标题哈希值生成的字符串,只要保证唯一即可。
需要注意的是,如果guid的取值是链接地址,并且确实是内容的永久访问地址,需要设置isPermaLink属性为true,如果不是永久链接,需要设置isPermaLink为false,避免客户端误判。
guid的配置示例
下面是一个标准的RSS 2.0源中item元素包含guid的示例,我们可以直观看到guid的配置方式:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>示例博客RSS源</title>
<link>https://ipipp.com/blog</link>
<description>这是一个示例博客的RSS订阅源</description>
<item>
<title>第一篇示例文章</title>
<link>https://ipipp.com/blog/post/1</link>
<description>这是第一篇示例文章的内容描述</description>
<pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
<guid isPermaLink="true">https://ipipp.com/blog/post/1</guid>
</item>
<item>
<title>第二篇示例文章</title>
<link>https://ipipp.com/blog/post/2</link>
<description>这是第二篇示例文章的内容描述</description>
<pubDate>Tue, 02 Jan 2024 00:00:00 GMT</pubDate>
<guid>post_uuid_123456789</guid>
</item>
</channel>
</rss>
在上面的示例中,第一个item的guid使用了内容的永久链接,并且设置了isPermaLink为true;第二个item的guid使用了自定义的UUID字符串,没有设置isPermaLink属性,默认值为false,两种方式都是符合规范的。
注意事项
在实际使用guid时,需要注意以下几点:
- 同一个RSS源中,所有item的guid必须唯一,否则会导致客户端识别错误,出现重复推送或者内容丢失的问题。
- 如果内容项被删除,对应的guid可以保留,不需要重复使用这个guid给其他新的内容项,避免客户端误认为旧内容又重新发布了。
- 不要随意修改已经发布的内容项的guid,除非你确实希望客户端把修改后的内容当作全新的内容推送给用户。
- 如果使用的是动态生成的链接作为guid,并且链接可能会变化,不要设置isPermaLink为true,避免链接变化后客户端无法正确识别内容。
总的来说,guid是RSS源中保障内容分发准确性的重要字段,正确配置和使用guid,可以大幅提升RSS订阅的用户体验,避免重复内容、更新识别错误等问题。