audio标签本身不防盗链,真正起作用的是服务器对音频资源的referer校验或动态token验证;nginx需配置valid_referers并允许none,或采用带签名时效的临时url。

HTML 里的 <audio></audio> 标签本身不防盗链,真正起作用的是服务器对 .mp3、.ogg 等资源的请求拦截策略——前端写得再严实,没服务端配合等于白忙。
为什么 audio 标签加了 referrer 检查也没用?
因为 <audio src="sound.mp3"></audio> 发起的请求,其 Referer 头是 HTML 页面的 URL;但当你直接在浏览器地址栏打开 HTML 文件(file:// 协议),或页面被 iframe 嵌入时,Referer 为空或为其他域名。Nginx 的 valid_referers 或后端 if request.headers.get('Referer') != 'https://yoursite.com' 判断,在这些场景下直接失效——它只对“被引用的子资源”有效,不保护 HTML 主文档本身。
- Chrome/Firefox 在
file://下默认禁用所有跨源请求,包括音频加载,控制台报ERR_FAILED或net::ERR_FILE_NOT_FOUND,不是代码问题,是协议限制 - 防盗链规则必须配置在 Web 服务器(如 Nginx)或 CDN 上,针对
.mp3、.ogg、.wav等后缀生效,不能只改 HTML -
<audio></audio>的crossorigin属性只影响 CORS 请求行为(比如用 JS 读取音频数据),跟防盗链无关
Nginx 配置防盗链最简可用写法
在 location ~ \.(mp3|ogg|wav)$ 块里加 Referer 校验,同时允许空 Referer(兼容直接访问 HTML 页面的场景):
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
location ~ \.(mp3|ogg|wav)$ {
valid_referers none blocked server_names *.yoursite.com;
if ($invalid_referer) {
return 403;
}
# 确保返回正确 Content-Type
types { audio/mpeg mp3; audio/ogg ogg; audio/wav wav; }
}
-
none允许空 Referer(file://打开或书签直连 HTML 时) -
blocked允许被屏蔽 Referer 的请求(如某些隐私浏览器) -
*.yoursite.com支持子域名,但不匹配evil-site.com - 务必加
types块,否则 MP3 文件可能返回text/plain,导致 Chrome 拒绝加载
比 Referer 更靠谱的防盗链:动态 Token
Referer 容易伪造,高敏感音频建议用带签名的临时 URL,每次播放前由后端生成:
- URL 示例:
sound.mp3?token=abc123&exp=1718123456,其中exp是 Unix 时间戳,有效期建议 5–15 分钟 - 后端验证逻辑:检查 token 签名 + exp 是否过期 + (可选)绑定用户 ID 或 IP
- 前端不要硬编码完整 URL,而是通过 AJAX 向
/api/audio/token?file=sound.mp3换取一次性的播放地址 - 配合
CORS头:Access-Control-Allow-Origin: https://yoursite.com,防止其他站点用 JS 构造请求盗取 token
容易被忽略的兼容性雷区
防盗链配置好了,但音频还是播不了?大概率卡在下面三点:
- 本地开发用
python -m http.server起的服务不支持valid_referers,必须上 Nginx / Apache / CDN 才能测试真实效果 - 移动端 Safari 对
Referer过滤更激进,默认启用Referrer-Policy: strict-origin-when-cross-origin,可能导致合法请求也被判为无效 - 如果用了
<source></source>多格式回退,每个src都要单独过防盗链校验——漏配一个.ogg规则,就等于开了个后门
真正有效的防护不是堆砌前端属性,而是让每个音频请求都经过服务端身份核验。别指望 muted 或 controls 能挡住爬虫,它们只管 UI,不管网络层。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










