rel="noreferrer"是最简单可靠的前端强制清空referer方式,专用于用户可点击外链,同时隐式启用noopener;referrer-policy响应头(推荐strict-origin-when-cross-origin)应由后端统一配置,覆盖脚本请求与默认行为,二者需分层配合。

直接设 rel="noreferrer" 是最简单、最可靠的方式,能彻底阻止 Referer 头发送——不是“隐藏”,是根本不出发。其他方案(比如 Referrer-Policy 响应头)只影响本域出站请求的策略强度,无法覆盖所有跳转场景,尤其对静态 HTML 链接无效。
什么时候必须用 rel="noreferrer"
当页面中存在明确的、用户可点击的外链(<a href="https://third-party.com"></a>),且你不想让目标网站收到任何来源 URL 时,这是唯一前端可控的强制清空 Referer 的手段。
- 它同时隐式启用
rel="noopener",防止新页面通过window.opener反向控制原页面(安全副作用,但有益) - 不依赖 JavaScript,服务端渲染、静态页、SEO 友好
- Chrome/Firefox/Safari/Edge 全部支持,无兼容性顾虑
-
rel="nofollow"或rel="external"完全不干预 Referer,别混用
Referrer-Policy 响应头该配哪个值
如果你控制后端或代理层(如 Nginx),应在 HTTP 响应中统一设置 Referrer-Policy 头,优先选 strict-origin-when-cross-origin:跨域时只发源(https://yoursite.com),同域保留完整路径;HTTPS→HTTP 降级时自动清空。这是隐私与功能的平衡点。
-
no-referrer最严,但会破坏所有第三方统计、广告归因、CDN 防盗链逻辑 -
origin跨域只发域名,适合敏感后台(如 /admin/*),但可能让部分分析工具丢失路径维度 - 不要设
unsafe-url—— 它会让完整 URL 泄露到 HTTP 站点,明文传输风险极高 - Nginx 中加
add_header Referrer-Policy "strict-origin-when-cross-origin" always;,always确保 4xx/5xx 错误页也生效
为什么不能靠 meta 标签全局控制
<meta name="referrer" content="origin"> 仅作用于当前 HTML 文档发起的**后续导航请求**(如点击链接、表单提交),对 JS 发起的 fetch、XMLHttpRequest、<img> 加载等无效;而且它被现代 Referrer-Policy 响应头覆盖——后者优先级更高。
- meta 标签只在文档头部生效,无法动态切换;响应头可按路径、状态码、上游条件灵活配置
- 若你用 Nginx Proxy Manager,改模板文件
_hsts.conf比在每个 HTML 里塞 meta 更可持续 - 某些旧浏览器(IE11)不支持 meta referrer,但支持响应头
真正容易被忽略的是:Referer 控制必须分层实施——rel="noreferrer" 管住 HTML 链接,Referrer-Policy 响应头管住脚本请求和默认行为,而防盗链、CSRF 防护等后端校验不能依赖 Referer 的存在与否,因为它本身不可信、可被绕过。










