无需登录 数据私有 本地保存

Referrer策略检测 - 请求头分析

19
0
0
0

Referrer 策略检测 & 请求头分析

检测当前页面 Referrer 策略 · 对比8种策略行为 · 模拟请求头 Referrer 值

检测到的策略
检测中...
当前页面信息
完整URL:-
Origin:-
协议:-
Document Referrer:-
浏览器默认策略
strict-origin-when-cross-origin Chrome 85+ / Firefox 87+ / Edge 85+ 的默认策略。同源发送完整URL,跨域仅发送origin,HTTPS→HTTP降级时不发送。

8种 Referrer 策略完整对比

隐私友好 平衡 信息暴露
策略名称 同源请求 跨域请求 HTTPS→HTTP 降级 隐私级别 是否默认
no-referrer 不发送 不发送 不发送 🔒 极严格
no-referrer-when-downgrade 完整URL 完整URL 不发送 ⚖️ 中等 曾为默认
origin 仅Origin 仅Origin 仅Origin ⚖️ 中等
origin-when-cross-origin 完整URL 仅Origin 仅Origin ⚖️ 中等
same-origin 完整URL 不发送 不发送 🔒 严格
strict-origin 仅Origin 仅Origin 不发送 🔒 严格
strict-origin-when-cross-origin 现代默认 完整URL 仅Origin 不发送 🔒 推荐 Chrome 85+
unsafe-url 完整URL 完整URL 完整URL ⚠️ 宽松
完整URL = 包含路径和查询参数(如 /page?a=1);仅Origin = 仅协议+主机+端口(如 https://example.com);不发送 = 完全不发送 Referrer 请求头。 高亮行为当前浏览器默认策略。

Referrer 值模拟器

输入源页面URL和目标URL,查看在不同Referrer策略下请求头中 Referer 字段的值。

留空则使用当前页面URL
策略 Referrer 值 是否发送 裁剪级别
点击"运行模拟"查看结果

Referrer 策略配置代码

选择一种策略,生成对应的配置代码片段。

-
-
-
-

场景化策略推荐

注重隐私保护

不希望泄露任何URL信息给第三方。

推荐:no-referrer 或 same-origin
现代网站最佳实践

兼顾隐私与功能性,适合大多数网站。

推荐:strict-origin-when-cross-origin
需要完整分析数据

需要完整的referrer信息用于统计分析。

推荐:origin-when-cross-origin(慎重)

常见问题 FAQ

Referrer 策略(Referrer Policy)是一组规则,用于控制浏览器在发起HTTP请求时是否发送 Referer(或 Referrer)请求头,以及发送多少信息。该请求头告诉目标服务器请求来源页面的URL。

通过配置合适的策略,网站可以在隐私保护功能需求之间取得平衡。例如:

  • 防止敏感URL参数(如token、session ID)泄露给第三方
  • 保护用户浏览历史隐私
  • 同时允许同源请求携带完整referrer以支持统计分析

Referrer策略可通过HTTP响应头、HTML <meta> 标签或单个元素的 referrerpolicy 属性设置。

Chrome 85(2020年8月)、Firefox 87(2021年3月)、Edge 85 起,现代浏览器的默认策略已从 no-referrer-when-downgrade 变更为 strict-origin-when-cross-origin

该策略的行为是:

  • 同源请求:发送完整URL(含路径和查询参数)
  • 跨域请求:仅发送origin(如 https://example.com
  • HTTPS→HTTP降级:不发送Referrer头

这是目前公认的最佳平衡策略,在保护隐私的同时维持了基本的功能性。

有多种方式可以检测:

  1. 浏览器开发者工具:打开 Network 面板,查看任意请求的请求头中 Referer 字段的值。
  2. 检查HTML源码:查找 <meta name="referrer" content="..."> 标签。
  3. 检查HTTP响应头:在开发者工具中查看 Referrer-Policy 响应头。
  4. 使用本工具:页面顶部会自动检测当前页面的meta标签设置。
  5. JavaScript检测:使用 document.querySelector('meta[name="referrer"]') 检查meta标签。

注意:通过HTTP响应头设置的策略无法被客户端JavaScript直接读取,本工具主要检测meta标签配置。

直接影响较小,但间接影响值得关注:

  • Google Analytics:如果使用过于严格的策略(如 no-referrer),GA可能无法正确追踪流量来源。
  • 第三方统计工具:大多数分析工具依赖Referrer来判断流量来源,使用 strict-origin-when-cross-origin 可保留origin信息,通常足够使用。
  • 外链分析:目标网站可通过Referrer了解流量来自哪里,过于严格的策略会隐藏这些信息。
  • 搜索引擎爬虫:Googlebot等爬虫本身不受Referrer策略影响,不影响索引。

建议使用 strict-origin-when-cross-origin,它提供了SEO所需的基本信息同时保护用户隐私。

这是一个历史遗留的拼写问题:

  • Referer:HTTP请求头的实际字段名,源于HTTP/1.0规范中的拼写错误(少了一个r)。所有浏览器和服务器都使用这个拼写。
  • Referrer:正确的英文单词拼写。在Referrer Policy规范、JavaScript的 document.referrer 属性中使用。

两者指代同一概念,但使用场景不同。HTTP头用 Referer,JS和策略配置用 Referrer

HTML5为 <a><area><img><iframe><link><script> 等元素提供了 referrerpolicy 属性:

<a href="https://example.com" referrerpolicy="no-referrer">链接</a> <img src="https://example.com/img.jpg" referrerpolicy="origin"> <iframe src="https://example.com" referrerpolicy="strict-origin"></iframe>

这个属性值为空字符串时表示使用页面默认策略。支持的值与全局策略一致(8种标准策略)。

以下情况浏览器不会发送Referrer头:

  1. 策略设置为 no-referrer
  2. 源页面使用file://协议(本地文件)
  3. 用户直接在地址栏输入URL或使用书签访问
  4. 从HTTPS页面跳转到HTTP页面且使用严格策略(strict-origin、strict-origin-when-cross-origin等)
  5. 使用rel="noreferrer"属性的链接
  6. 某些浏览器的隐私模式可能限制Referrer发送
  7. 源页面是HTTPS且目标为不安全的HTTP(降级场景 + 严格策略)

此时请求头中要么不包含Referer字段,要么其值为空字符串(取决于具体浏览器实现)。

Referrer Policy 与 CSP 是两个独立的安全机制,但它们可以互补:

  • CSP(Content Security Policy):控制页面可以加载哪些资源、执行哪些脚本,防止XSS攻击。
  • Referrer Policy:控制向外发送的Referrer信息量,保护隐私。

CSP本身不直接管理Referrer行为。但CSP的 form-actionnavigate-to 等指令可以限制页面跳转目标,间接影响Referrer的发送场景。

两者建议同时配置,形成更全面的安全防护体系。推荐组合:合理的CSP规则 + strict-origin-when-cross-origin Referrer策略。

常见原因及排查步骤:

  1. 优先级冲突:HTTP响应头的优先级高于meta标签。如果同时设置,以HTTP头为准。
  2. 元素级覆盖:单个元素的 referrerpolicy 属性会覆盖全局策略。
  3. 缓存问题:浏览器可能缓存了旧的响应头,尝试清除缓存或使用隐身模式测试。
  4. 拼写错误:检查策略名称是否拼写正确(如 strict-origin-when-cross-origin 容易漏写连字符)。
  5. 服务器未正确发送头:使用开发者工具Network面板确认响应头是否存在。
  6. CDN/代理剥离:某些CDN或反向代理可能会移除自定义响应头。

建议优先使用HTTP响应头设置策略,并在开发者工具中验证实际生效的策略。

两者的核心区别在于HTTPS→HTTP降级时的行为:

场景origin-when-cross-originstrict-origin-when-cross-origin
同源请求完整URL ✅完整URL ✅
跨域请求(HTTPS→HTTPS)仅Origin仅Origin
跨域请求(HTTPS→HTTP)⬇️降级仅Origin ⚠️不发送 🔒

strict-origin-when-cross-origin 更安全,因为在降级场景下完全隐藏来源信息,防止中间人攻击获取referrer数据。这是它成为现代浏览器默认策略的原因。