必须在发起请求的html标签上显式添加referrerpolicy属性才生效,支持的标签包括、、、(含rel="stylesheet"/"preload")、、;不支持、等纯容器标签,且仅影响该元素触发的单次主动请求。

必须在发起请求的 HTML 标签上显式加 referrerpolicy 属性,否则对 <img>、<script></script>、<link> 等资源加载完全无效——<meta name="referrer"> 对这些标签不起作用。
哪些标签支持 referrerpolicy 属性?
只对「主动发起网络请求」的元素生效,且仅影响该次请求。不支持纯容器标签(如 <div>、<code><p></p>),浏览器会直接忽略。
-
<a></a>:控制点击跳转时的 Referer(但右键“在新标签页打开”会绕过) -
<img>、<script></script>、<link rel="stylesheet">、<link rel="preload">:控制资源加载时的 Referer -
<iframe></iframe>:控制 iframe 内部 JS 发起的请求(不是父页面向它发的请求) -
<form></form>:控制 GET/POST 提交时的 Referer(不影响 fetch() 提交)
referrerpolicy 值怎么选才不踩坑?
拼错或大小写错误(如 origin-when-crossorigin 少个 -)会被浏览器静默降级为默认策略 no-referrer-when-downgrade,导致敏感路径泄露。
-
strict-origin-when-cross-origin:推荐作为多数外链/CDN 资源的默认值;同源发完整 URL,跨源只发https://example.com,HTTPS→HTTP 不发 -
origin:适合 CDN 字体、第三方脚本等只校验 origin 的场景,简单粗暴 -
no-referrer:用于埋点图、支付回调页等绝对不能暴露来源的请求 -
unsafe-url:生产环境禁用——强制发送完整 URL,含?token=xxx或/admin/user/123
为什么加了 referrerpolicy 还是 403 或统计失效?
因为 referrerpolicy 只裁剪 Referer 头,不改变请求本身。下游服务是否接受,取决于它的 Referer 白名单规则。
- CDN 返回
403 Forbidden?检查它是否只允许https://yoursite.com/*(需完整路径),而你设的是origin(只发https://yoursite.com) - 埋点日志里 Referer 为空?说明用了
no-referrer,但后端统计依赖 Referer 归因 - Safari 15.3 以下版本忽略
origin-when-cross-origin,回退到默认策略,造成统计口径不一致 -
<script src="..."></script>加了属性有效,但fetch()或动态创建的script标签完全不认它——这类请求由响应头Referrer-Policy控制
真正起效的配置必须匹配下游服务的校验逻辑,且不能指望单点设置覆盖所有请求类型;referrerpolicy 是局部开关,不是全局策略引擎。











