referrerpolicy是html元素属性而非独立标签,仅对、、、、、、等主动发起请求的标签生效,且只作用于该元素触发的单次请求;拼写错误或加在等容器标签上则被浏览器忽略。

referrerpolicy 不是标签,是 HTML 元素的属性——写成 <img referrerpolicy="..."> 才有效;写成 <referrerpolicy></referrerpolicy> 或独立标签完全无效,浏览器直接忽略。
referrerpolicy 必须加在哪些 HTML 元素上才起作用
它只对实际发起网络请求的元素生效,且仅影响该元素触发的**这一次请求**:
-
<a></a>:控制点击跳转时的 Referer(但右键“在新标签页打开”会绕过) -
<img>、<script></script>、<link>(含rel="preload")、<iframe></iframe>:资源加载时生效 -
<form></form>:表单提交时生效(注意:fetch()或XMLHttpRequest完全不认这个) -
<video></video>、<audio></audio>:媒体资源加载时也支持 - 不支持
<div>、<code><p></p>、<span></span>等纯容器标签——写了也白写常用值怎么选?拼错就退化为默认策略
值大小写敏感、必须是字符串字面量,拼错(比如
origin-when-crossorigin少个-)会被浏览器静默忽略,回退到no-referrer-when-downgrade:-
no-referrer:请求头里彻底没有Referer:行(最严,但可能被 CDN 拒绝) -
origin:一律只发https://example.com(协议+域名+端口),路径和参数全砍掉 -
strict-origin-when-cross-origin:同源发完整 URL;跨源只发 origin;HTTPS → HTTP 不发(2026 年推荐起点) -
unsafe-url:始终发完整 URL(含?token=xxx),生产环境禁用 -
same-origin和strict-origin在<img>上实际无效,旧版 Safari 会降级,别用
为什么设了却没效果?三个硬坑常被踩
常见失效不是代码写错,而是时机、覆盖或兼容性问题:
-
referrerpolicy属性不继承、不传递——<img>加了,不影响页面后续任何请求(包括新页面里的fetch()) - 服务端响应头
Referrer-Policy优先级更高(除no-referrer外),会覆盖 HTML 属性 - Safari ≤15.4 不支持该属性,需靠 CDN 白名单兜底;若图片 403 且响应头带
X-Referer-Rejected,说明服务端校验失败,前端策略再对也没用 - 动态绑定(如 React 的
referrerpolicy={policy})若未确保 DOM 渲染后值已更新,也会失效
验证是否真生效,别信 DevTools Network 面板
Network 面板显示的
Referer可能被缓存、重定向或 DevTools 自身逻辑干扰:- 真正可靠方式:起一个本地接收服务(如
python3 -m http.server 8000),把测试链接指向它,观察终端原始请求头 - 看到
Referer:行缺失或内容符合预期(如跨域时只有https://a.com),才算成功 - 图片加载成功 ≠ 策略生效;CDN 日志里 Referer 为空,可能是统计归因断链,而非隐私保护到位
referrerpolicy 是单次请求的裁剪开关,不是全局隐身术;它管不了 JS 动态请求,也防不住右键新开标签页——这些地方得靠响应头、
rel="noreferrer"或服务端配合。 -











