必须为指向第三方分析/广告/社交SDK、用户可点击的跨域链接、含敏感query的内部链接及target="_blank"外链显式设置referrerpolicy;推荐strict-origin-when-cross-origin,禁用rel="noreferrer"以免覆盖策略。

外链必须显式设置 referrerpolicy,否则默认用 no-referrer-when-downgrade,HTTPS→HTTPS 跳转时会泄露完整 URL(含路径和敏感 query 参数)。
哪些 a 标签必须加 referrerpolicy?
不是所有链接都需要,但以下几类不设就等于主动交出用户路径:
- 指向第三方分析、广告、社交 SDK 的跳转(如分享到微博、微信 JS-SDK 回调地址)
- 用户可点击的「帮助文档」「合作伙伴官网」「外部服务登录页」等跨域链接
- 含敏感 query 的内部链接(如
/admin/user/123?token=abc),即使同域也建议裁剪 - 带
target="_blank"的外链——它默认继承window.opener,referrerpolicy单独加还不够,得配rel="noopener"
referrerpolicy="strict-origin-when-cross-origin" 是当前最稳妥的选择
它比默认值更安全,且兼容现代浏览器(Chrome/Firefox 默认,Safari ≥15.4 支持):
- 同源跳转(如
https://a.com/page1 → https://a.com/page2):发完整Referer,不影响统计归因 - 跨源 HTTPS 跳转(如
https://a.com/page1 → https://b.com/pay):只发https://a.com,砍掉路径和参数 - HTTPS → HTTP 跳转:完全不发
Referer,防止明文泄露 - 拼写必须严格为
strict-origin-when-cross-origin(少个连字符或大小写错,浏览器静默回退到默认策略)
别和 rel="noreferrer" 混用,否则策略被覆盖
rel="noreferrer" 优先级高于 referrerpolicy,只要同时存在,浏览器直接忽略后者,强制等效于 referrerpolicy="no-referrer":
立即学习“前端免费学习笔记(深入)”;
- 想精确控制 Referer(比如跨域只发 origin、同域发全量),就只用
referrerpolicy,不要加rel="noreferrer" - 图省事要彻底清 Referer + 切断
window.opener,可用rel="noreferrer noopener",但它不支持细粒度策略 -
rel="noopener"必须和target="_blank"同时出现,否则新页能通过window.opener.location劫持原页面
为什么加了还是看到完整 Referer?三个硬坑常被忽略
失效往往不是代码写错,而是环境或逻辑问题:
- 右键「在新标签页中打开」会绕过
referrerpolicy,只走浏览器默认策略——必须配合rel="noreferrer"或后端响应头兜底 - 服务端校验 Referer 白名单(如 CDN 配置了
https://yoursite.com/*),而你设的是origin(只发https://yoursite.com),导致 403 - DevTools Network 面板里的 Referer 可能被缓存、重定向或面板自身逻辑干扰;真验证得用本地接收服务(如
python3 -m http.server 8000)看原始请求头
真正起效的关键不在“加没加”,而在“加在哪”“加对没”“下游认不认”。referrerpolicy 是局部开关,不是魔法开关;它只管这一次点击发起的请求,对 fetch()、动态插入的 script、iframe 内部请求完全无效。



















