rel="noreferrer"能彻底清空referer,即浏览器在点击跳转时不构造、不发送referer请求头字段,目标服务器完全收不到该字段;它作用于a标签点击行为本身,不依赖js,全浏览器兼容,但仅对用户点击生效,不控制右键新开、js跳转等其他路径。

rel="noreferrer" 不是“隐藏”来源,而是让浏览器压根不发 Referer 请求头——目标服务器收不到这个字段,连空字符串都不会有。
为什么rel="noreferrer"能彻底清空Referer
它作用于链接点击跳转行为本身,由浏览器在发起 HTTP 请求前就决定:不构造、不携带 Referer 字段。这不是 JS 拦截或后端过滤,是原生协议层的切断。
- 只对
<a></a>标签的点击跳转生效(包括右键“在新标签页打开”以外的所有用户点击) - 不依赖 JavaScript,静态 HTML、邮件模板、SEO 爬虫环境全部适用
- 现代浏览器(Chrome 51+、Firefox 50+、Safari 11.1+、Edge 79+)全支持,无 polyfill 需求
- 它不控制
<img>、<script></script>、<iframe></iframe>的 Referer,那些得用referrerpolicy="no-referrer"
rel="noreferrer"必须和target="_blank"一起用吗
不是必须,但常见组合场景下强烈建议配对使用。单独加 rel="noreferrer" 在 target="_self" 下也有效——跳转时照样不发 Referer。
- 如果你只是想防止来源泄露(比如跳转到广告/下载页),
target="_self"+rel="noreferrer"就够了 - 但若用了
target="_blank"却只加noreferrer不加noopener,会漏掉安全漏洞:新页仍可通过window.opener劫持原页面 - 真实高危场景常是 CMS 或富文本自动加
target="_blank",却完全没补rel—— 这时候漏的是安全,不是隐私
验证rel="noreferrer"是否真生效
别信代码写了就完事,必须实测请求头。
- 打开 Chrome DevTools → Network 标签页 → 点击那个外链
- 找到对应跳转请求(通常是文档类型 document)→ 展开 Request Headers
- 确认里面**完全没有**
Referer字段(不是值为空,是字段根本不存在) - 特别注意敏感路径:比如从
/admin?token=abc跳出,目标站不应收到任何含该 token 的 Referer
真正容易被忽略的点在于:它只守得住“用户点击”这一条路径。右键新开、JS window.open()、表单提交、重定向响应等行为,都不受 rel="noreferrer" 影响——这些得靠其他机制分别控制。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











