Referrer-Policy 是什么
Referrer-Policy 是响应头,控制浏览器在导航跳转、加载子资源、发起跨域请求时,Referer 头里带多少信息:从完全不发,到只发站点源,再到连同路径与查询串一起发。字段名 Referer 是早期拼写错误的历史遗留,标准里一直保留至今。它可以由服务端响应头下发,也可以由页面内 meta 标签声明;只约束浏览器行为,对 curl、爬虫与服务器之间的调用没有任何作用。
基本信息
| 字段名 | Referrer-Policy(响应头) |
|---|---|
| 标准取值数量 | 8 种 |
| 现代浏览器默认 | strict-origin-when-cross-origin |
| 适用范围 | 浏览器发起的导航与子资源请求 |
| 能否用 JS 设置 | 否,Referer 属于禁止修改的请求头 |
| 优先级 | 响应头高于 meta 标签 |
八种取值对照
| 取值 | 跨站发送什么 | 要点 |
|---|---|---|
| no-referrer | 什么都不发 | 最严格 |
| same-origin | 同源发完整地址,跨站不发 | 站内统计仍可用 |
| origin | 只发源 | 同源请求也降到源 |
| strict-origin | 只发源 | 加密降级到 HTTP 时不发 |
| origin-when-cross-origin | 同源完整,跨站只发源 | 不处理降级场景 |
| strict-origin-when-cross-origin | 同源完整,跨站只发源 | 现代浏览器默认值 |
| no-referrer-when-downgrade | 默认发完整地址 | 仅 HTTPS 跳 HTTP 时不发 |
| unsafe-url | 任何情况都发完整地址 | 会泄漏地址里的参数 |
典型使用场景
- 安全基线落地:把浏览器默认值显式写死在响应头里,避免不同客户端默认策略漂移
- 含敏感参数的后台页面:用 no-referrer 防止查询串里的工单号、临时令牌随外链外泄
- 第三方统计与广告归因:需要保留来源站信息时选 origin 级别,在统计可用与路径隐私之间取平衡
- 防盗链场景:先确认服务端校验的是源还是完整地址,再定策略,避免校验规则与策略对不上
- 内网系统与邮件通知里的跳转链接:减少来源路径暴露,降低钓鱼链条上的信息价值
服务端与页面配置
服务端与页面配置
# Nginx:加 always 保证错误页也带上该头
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Apache(httpd.conf 或 .htaccess)
# Header always set Referrer-Policy "no-referrer"
# 页面级声明,只影响本文档发起的请求
# <meta name="referrer" content="no-referrer">验证分两步:curl -sI 确认响应头确实下发;再在浏览器打开页面点击站外链接,从目标站日志看 Referer 的实际形态。meta 声明在文档解析后才生效,页面首屏已发出的子资源请求可能仍按上一份策略携带来源。
unsafe-url 会把完整地址连同查询串里的会话标识、令牌、手机号发给第三方站点及其日志系统,等于主动交出凭证;含敏感参数的系统禁用该值,也应尽量避免把凭证放进查询串。