referrerpolicy属性值包括no-referrer(完全不发Referer)、no-referrer-when-downgrade(默认,HTTPS→HTTP不发)、origin(只发协议+域名+端口)、origin-when-cross-origin(同源发完整URL,跨源只发origin)、unsafe-url(始终发完整URL含路径和参数)等,各自控制Referer头发送的粒度与范围,影响隐私安全与功能兼容性。

referrerpolicy属性值有哪些,各自什么效果?
referrerpolicy 控制浏览器在跳转时向目标站点发送多少来源信息。常见值有:no-referrer(完全不发 Referer)、no-referrer-when-downgrade(默认值,HTTPS→HTTP 不发)、origin(只发协议+域名+端口)、origin-when-cross-origin(同源发完整 URL,跨源只发 origin)、unsafe-url(始终发完整 URL,含路径和查询参数)。
不同值影响隐私与功能:比如用 origin 能防止敏感路径泄露,但某些依赖完整 Referer 的统计或防盗链逻辑可能失效;unsafe-url 风险高,尤其跳转到第三方时可能暴露 token 或用户 ID。
什么时候必须显式设置 referrerpolicy?
不是所有外链都需要设,但以下场景建议强制指定:
- 跳转到第三方登录页(如 OAuth 授权地址),避免
Referer泄露内部路径或 session ID - 链接指向 CDN 或静态资源站,防止被用来反向探测你的前端路由结构
- 页面含敏感操作入口(如“退出登录”“删除账号”),用
no-referrer切断来源线索
注意:referrerpolicy 只对 <a>、<img>、<iframe>、<script> 等发起导航或资源请求的元素生效,对 JavaScript 中 window.location.href 赋值无效。
立即学习“前端免费学习笔记(深入)”;
referrerpolicy 和 meta 标签的 referrer 设置冲突吗?
会,且 <meta name="referrer"> 是全局策略,优先级低于单个元素的 referrerpolicy 属性。比如页面 head 里写了:
<meta name="referrer" content="origin">
但某个链接明确写了 referrerpolicy="no-referrer",那这个链接就按 no-referrer 执行,其他没设属性的链接才 fallback 到 origin。
不过 <meta name="referrer"> 已被 Chrome 85+ 废弃,Firefox 和 Safari 也逐步不支持,现在只推荐用元素级 referrerpolicy,更可控、更易审计。
实际写法要注意哪些坑?
- 值必须全小写,
NO-REFERRER 或 No-Referrer 都无效,浏览器当非法值忽略,退回到默认行为
- 不要混用空格或引号:正确是
<a href="..." referrerpolicy="origin">,错误写法如 referrerpolicy = "origin"(等号前后空格会导致解析失败)
- SSR 渲染时若从服务端拼接该属性,需确保值被正确转义,避免 XSS(比如用户输入的 URL 被注入恶意策略)
- Safari 对
origin-when-cross-origin 支持较晚(16.4+),旧版本会降级为 no-referrer-when-downgrade,如有兼容要求得测试确认
NO-REFERRER 或 No-Referrer 都无效,浏览器当非法值忽略,退回到默认行为 <a href="..." referrerpolicy="origin">,错误写法如 referrerpolicy = "origin"(等号前后空格会导致解析失败) origin-when-cross-origin 支持较晚(16.4+),旧版本会降级为 no-referrer-when-downgrade,如有兼容要求得测试确认 复杂点在于:Referer 控制本质是权衡——关太多,对方统计/日志/防盗链可能出错;开太多,又等于主动交出用户行为路径。真正安全的做法不是“统一设成 no-referrer”,而是按链接用途分级配置。



















