rel="noreferrer" 能真正阻止 Referer 发送,是唯一前端可控的“彻底不发”方案,作用于 <a> 标签点击行为,所有现代浏览器原生支持且不依赖 JavaScript。

rel="noreferrer" 能否真正阻止 Referer 发送
能,而且是唯一前端可控的“彻底不发”方案——不是隐藏、不是截断、不是替换,是让浏览器压根不生成 Referer 请求头。它作用于 <a> 标签的点击行为本身,所有现代浏览器(Chrome 49+、Firefox 36+、Safari 10.1+、Edge 15+)均原生支持,不依赖 JavaScript。
常见错误现象:加了 rel="noopener" 就以为隐私安全了;实际 Referer 仍会完整发送。只加 noopener 解决的是 window.opener 安全漏洞,和 Referer 完全无关。
-
rel="noreferrer"自动隐式启用noopener,一并解决两个问题 - 若同时写
rel="noreferrer noopener",noopener是冗余的,但无害 - 右键“在新标签页打开”不受
rel控制——这是设计使然,非 bug
怎么加才生效:位置、组合与常见漏点
必须直接加在 <a> 标签上,且仅对用户点击生效。其他跳转方式(如 JS 的 window.location、location.href)完全不响应该属性。
正确写法示例:<a href="https://example.com" rel="noreferrer" target="_blank">去第三方站点</a>
立即学习“前端免费学习笔记(深入)”;
- 必须配合
target="_blank"才有必要加noreferrer?不,即使target="_self",只要目标是第三方域名,就应加 - 邮件模板、CMS 后台导出的 HTML 中,常被自动 strip 掉
rel属性,需检查输出逻辑 - 广告位、联盟链接、下载按钮(如
<a href="/download?token=abc">下载</a>)最容易漏 -
rel="noreferrer"和referrerpolicy="no-referrer"不要混用;后者会被忽略
如何验证 Referer 确实没发
别只看代码写了没,必须实测请求头。打开 Chrome DevTools → Network 标签页 → 点击链接 → 找到对应请求 → 查看 Request Headers 区域。
- 正确效果:
Referer字段应完全缺失(不是空字符串,是压根没这一行) - 重点验证敏感路径:比如从
/dashboard?uid=123&token=xyz跳转,目标站不应收到完整 URL - curl 测试无效:curl 默认不带 Referer,不能代替浏览器点击行为验证
- 如果看到
Referer: https://yoursite.com/xxx,说明rel="noreferrer"没生效,优先检查是否被 CMS 过滤或拼写错误(如写成noreferer)
为什么 referrerpolicy="no-referrer" 不适合链接跳转
referrerpolicy 属性适用于 <img>、<script>、<iframe>、<form> 等资源加载场景,但它对 <a> 标签点击跳转**无效**(除部分旧版 Safari 外,主流浏览器已明确不支持)。
- 给
<a>加referrerpolicy="no-referrer"是徒劳的,浏览器会忽略 - 它不触发
noopener,新开页面仍可通过window.opener反向操控原页 - 右键新开时,
referrerpolicy也无效;而rel="noreferrer"至少守住“点击”这一主路径 - 真要全局控制,应由后端设置 HTTP 响应头
Referrer-Policy: strict-origin-when-cross-origin
rel="noreferrer" 约束。如果你的业务要求 Referer 绝对不可见,就得接受这个边界——没有银弹,只有最常发生的路径被守住。



















