
一、Referer 防盗链在 M3U8 业务中的使用现状很多 CDN、Nginx 会开启 Referer 防盗链通过 HTTP 请求头里面的 Referer 来源信息做访问控制只允许自己业务域名过来的请求访问 M3U8 和 TS 分片资源防止别人直接盗链地址在其他网站嵌入播放。Referer 防盗链看着简单实际在 HLS 网页业务里面坑不少。很多后端配置完 Referer 规则之后出现现象部分环境播放正常部分环境 403。比如 App 里面 WebView 打开 403PC 浏览器网页正常或者部分跳转场景 Referer 丢失直接鉴权失败。curl 测试的时候我们可以手动带上 Referer请求一切正常。但是浏览器、WebView 很多场景会自动清空、降级 Referer业务就直接 403。很多开发误以为配置好 CDN 白名单域名就万事大吉忽略浏览器本身的 Referer 策略。遇到 Referer 相关 403 疑难问题我会使用 m3u8live.cn 网页调试工具打开 F12 网络面板观察真实请求携带的 Referer 头复现鉴权 403 现象。二、Referer 防盗链高频踩坑场景场景 1HTTPS 页面跳转访问 HTTP 资源Referer 会被浏览器清空HTTPS 页面访问 http 的 M3U8 资源浏览器安全策略会直接丢弃 Referer 头。就算配置白名单域名请求不带 Referer直接返回 403。场景 2安卓、iOS WebView 环境Referer 为空很多 App 内嵌 WebViewWebView 默认不会自动填充 Referer 请求头。同样一套 M3U8 地址手机浏览器播放正常App‑WebView 打开直接 403。场景 3页面使用 relnoreferrerReferer 被清空a 标签、iframe 设置 noreferrer 属性浏览器请求资源不会带上 Referer触发防盗链 403。场景 4跨域场景 Referer 降级只保留域名丢失路径跨域请求的时候部分浏览器 Referer 只会携带域名不会携带完整页面路径。如果防盗链配置做完整路径匹配鉴权失败。场景 5curl 手动模拟带上 Referer 一切正常浏览器实际访问不带 Referer很多运维拿 curl 测试手动添加 Referer请求全部 200就认为防盗链配置没问题。但是真实浏览器环境Referer 会被各种场景清空线上大量 403。三、Referer 防盗链排查简单步骤第一步待测 M3U8 放到网页调试工具F12 网络面板观察 M3U8、TS 分片、密钥请求看 Request Headers 里面 Referer 是不是存在是什么内容。如果浏览器真实请求 Referer 为空业务又强校验 Referer403 属于预期现象。第二步区分curl 手动带 referer 只是模拟不能代表浏览器真实行为。curl 通过不代表网页业务正常。第三步如果业务有大量 WebView 访问场景不建议把 Referer 作为唯一防盗链手段。四、业务开发运维建议Referer 防盗链适合作为辅助防护手段不要作为唯一鉴权方式。优先使用 URL‑Token 签名防盗链。WebView、HTTPS‑HTTP 混合场景很容易丢失 Referer。Referer 白名单配置只做域名级别白名单不要匹配完整路径。浏览器跨域会丢弃路径部分。业务存在 App‑WebView 访问WebView 需要业务代码手动设置 Referer 头或者放弃强 Referer 校验。HTTPS 业务站点音视频资源全部使用 HTTPS规避 HTTPS 访问 HTTP 资源导致 Referer 被清空。五、总结Referer 防盗链实现简单但是浏览器、WebView 有很多场景会直接清空 Referer 请求头。curl 手动模拟带上 Referer 可以访问不等于真实浏览器业务环境可以正常播放。WebView、https 访问 http、noreferrer 标签都会造成 Referer 丢失。Referer 适合做辅助防盗链不建议作为唯一鉴权手段。遇到 Referer 导致 403借助网页调试工具观察浏览器真实 Referer 请求头快速定位问题。