referrerpolicy是控制请求是否及如何发送referer头的html属性,直接影响防盗链验证——它不绕过防盗链,而是决定向服务端提供何种来源信息:no-referrer不发referer(常被拒)、origin只发协议+域名+端口、strict-origin-when-cross-origin跨域仅发origin、默认no-referrer-when-downgrade在https→https跨域时仍发完整url易泄露敏感参数。

referrerpolicy 是什么,为什么影响防盗链
浏览器在加载 <img> 时默认会带上 Referer 请求头,值为当前页面 URL。服务端常靠这个字段判断请求是否来自白名单域名(比如只允许 yoursite.com 访问图片),这就是常见防盗链逻辑。referrerpolicy 属性就是用来控制这个 Referer 是否发、发多少——它不“绕过”防盗链,而是决定你是否主动提供验证依据。
referrerpolicy 可选值对 Referer 的实际影响
不同取值直接改变请求头内容,服务端看到的 Referer 值可能为空、被截断或完全不发送:
-
no-referrer:请求头里彻底不带Referer字段 → 防盗链服务器通常拒绝(因无来源可验) -
no-referrer-when-downgrade(默认值):从 HTTPS 页面加载 HTTP 图片时删Referer;其他情况照发全路径 → 大多数防盗链规则能匹配 -
origin:只发协议+域名+端口(如https://a.com),不带路径和参数 → 若服务端只校验域名,可能通过;若校验完整 referer 路径则失败 -
strict-origin-when-cross-origin:跨域时只发 origin,同域发完整 referer → 更精细,但兼容性略低(IE 不支持)
实战中怎么选值才能让图片正常加载
关键看目标图床的防盗链策略怎么写的。例如:
- 如果你用的是 Nginx 的
valid_referers,且配置了server_name或具体域名,origin通常够用 - 如果图床要求
Referer必须包含特定路径(如https://a.com/post/123),那只能用no-referrer-when-downgrade或不设该属性,否则必然 403 -
no-referrer几乎总是失败,除非图床明确允许空 referer(极少见) - 别依赖
referrerpolicy“欺骗”防盗链——它只是声明行为,服务端仍按自己规则判
示例:
@@##@@
容易被忽略的坑:CSP 和 referrerpolicy 冲突
如果页面启用了 Content-Security-Policy 的 reflected-xss 或设置了 referrer 指令(如 referrer no-referrer),它会覆盖 <img src="https://cdn.example.com/photo.jpg?x-oss-process=image/resize,p_40" referrerpolicy="origin"> 标签上的 referrerpolicy。此时无论你怎么写标签属性都没用。
验证方法:打开 DevTools → Network → 点开图片请求 → 查看 Request Headers 中的 Referer 字段实际值,而不是只信标签写法。
跨域图片加载还受 CORS 影响,referrerpolicy 不解决 403 以外的错误(比如 401 或 CORS blocked)。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











