referrerpolicy 属性不能全局配置,必须为每个 <script> 标签单独设置,仅影响该次加载请求;它不继承、不被 <meta> 或外层容器支持,动态创建的 script 元素也不生效,优先级低于响应头但高于默认策略。

referrerpolicy 属性不能在 <script> 标签上“全局配置”——它天生就是局部的,每个 <script> 标签必须单独写,且只影响该次加载行为。
为什么 script 标签不支持全局 referrerpolicy
浏览器设计上,referrerpolicy 是元素级属性,不是文档级声明。它只作用于当前标签发起的单次请求:<script src="a.js" referrerpolicy="origin"></script> 只裁剪这个 a.js 的 Referer;另一个没写的 <script src="b.js"> 仍按页面默认策略(通常是 no-referrer-when-downgrade)发送完整 URL。
-
<meta name="referrer">对<script>加载完全无效 - 把
referrerpolicy写在<head>或外层容器(如<div>)里,浏览器直接忽略 - 动态创建的
script元素(如document.createElement('script'))即使设置该属性,也**不生效**——这类请求由响应头控制
script 标签上 referrerpolicy 的实际用法
你只能逐个加,但得知道加在哪、怎么选值才不翻车:
- 值必须小写:
origin✅,Origin或ORIGIN❌(会被静默降级为no-referrer-when-downgrade) - 推荐优先用
origin:第三方脚本(如统计、广告 SDK)通常只校验域名,不依赖路径,既防敏感 query 泄露,又避免 403 - 慎用
no-referrer:某些 CDN 脚本依赖 Referer 白名单,设了可能加载失败 -
strict-origin-when-cross-origin是默认值,但如果你明确写了,就等于显式继承——无坏处,但也没额外收益
示例:<script src="https://cdn.example.com/analytics.js" referrerpolicy="origin"></script>
立即学习“前端免费学习笔记(深入)”;
真正想“全局”控制 script 请求,得靠响应头
前端单点设置永远是补位,主力必须是后端 Referrer-Policy 响应头:
- Nginx 配置:
add_header Referrer-Policy "origin"; - Apache:
Header set Referrer-Policy "origin" - 该头对所有
<script>加载、fetch()、<img>等子资源请求统一生效 - 注意:如果某个
<script>显式写了referrerpolicy,它的优先级高于响应头(除no-referrer外)
容易被忽略的兼容性与调试点
旧版 Safari(≤15.4)压根不认 referrerpolicy 属性,哪怕你写对了也白搭;调试时别只看 JS 文件是否加载成功,要打开 Network → 找到那个 script 请求 → 查 Request Headers 里的 Referer 字段值是否符合预期。
最麻烦的是混合场景:CDN 返回的 JS 自身又动态加载其他资源,那些后续请求不受你页面上的 referrerpolicy 控制——它们取决于 JS 运行时环境和目标服务的响应头。



















