在RSS 2.0规范中,enclosure标签用于为某条feed item附加一个外部资源,最常见的是音频、视频或文件下载。它让RSS阅读器知道这条内容还带着一个可下载的媒体文件,从而展示播放按钮或下载入口。

enclosure标签的基本结构
enclosure是item节点下的子元素,它不是一个成对标签,而是通过三个必填属性来描述资源:
- url:资源的网络地址,必须是可直接访问的链接
- length:资源的字节大小,用数字表示
- type:资源的MIME类型,如audio/mpeg、video/mp4、application/pdf
标准写法示例
下面是一个包含音频附件的RSS item片段:
<item> <title>第1期:聊聊RSS</title> <link>https://ipipp.com/post/1</link> <description>本期我们聊一聊RSS的历史</description> <enclosure url="https://ipipp.com/audio/ep1.mp3" length="12345678" type="audio/mpeg" /> </item>
常见使用场景
播客feed
播客是最典型的enclosure用法,每个item放一期音频,阅读器或播客软件会自动识别并列出节目单。
文件分发
技术博客常用它附带PDF或源码包,比如:
<enclosure url="https://ipipp.com/files/demo.zip" length="204800" type="application/zip" />
需要注意的问题
| 问题 | 说明 |
|---|---|
| length不准 | 填错大小可能导致部分客户端拒绝下载,建议用服务器真实字节数 |
| type写错 | MIME类型不匹配时,阅读器可能无法识别媒体种类 |
| url失效 | 资源删除后enclosure变成死链,影响订阅体验 |
用代码生成enclosure
如果你用Python生成RSS,可以参考下面这段简单逻辑:
import os
def make_enclosure(url, file_path, mime):
# 读取本地文件大小作为length
size = os.path.getsize(file_path)
return '<enclosure url="%s" length="%d" type="%s" />' % (url, size, mime)
print(make_enclosure('https://ipipp.com/a.mp3', 'a.mp3', 'audio/mpeg'))
只要记住enclosure是单标签、三个属性缺一不可,并在item内正确使用,就能让你的RSS源顺利携带多媒体内容。