Referrer-Policy
用法
当浏览器跟随链接或加载子资源时,通常会发送一个包含来源页面 URL 的 Referer 头部。Referrer-Policy 头部让站点运营者能够控制 URL 中的哪部分被共享,或者是否发送 Referer 头部。
注重隐私的站点会剥离 referrer 信息,以防止向第三方泄露查询参数、路径或源细节。该策略适用于从页面发起的导航、子资源请求和预取操作。
以逗号分隔的策略列表可作为回退链。浏览器会选取列表中它所支持的最后一条策略,从而使向前兼容的部署变得简单直接。
设置策略
设置 referrer 策略有三种机制:
元素级属性会覆盖页面级的 meta 标签,而后者又会覆盖 HTTP 头部。HTTP 头部是最可靠的方法,因为该策略在任何 HTML 被解析之前就已生效。
no-referrer
no-referrer 指令完全禁止发送 Referer 头部。从该页面发起的任何请求都不会附带任何 URL 信息。
no-referrer-when-downgrade
no-referrer-when-downgrade 指令对同协议请求发送完整 URL(源、路径和查询字符串)。当请求发生安全降级(HTTPS 到 HTTP)时,Referer 头部会被省略。
origin
origin 指令只发送 URL 的源部分(协议、主机和端口)。每个请求都会剥离路径和查询字符串。
origin-when-cross-origin
origin-when-cross-origin 指令对同源请求发送完整 URL。对于跨源请求或协议降级,只发送源。
same-origin
same-origin 指令对同源请求发送完整 URL,对跨源请求则完全省略 Referer 头部。
strict-origin
strict-origin 指令只发送源,且仅在协议的安全级别保持不变或提升时(HTTPS 到 HTTPS,或 HTTP 到 HTTP)才发送。协议降级会禁止发送该头部。
strict-origin-when-cross-origin
strict-origin-when-cross-origin 指令对同源请求发送完整 URL,对同安全级别的跨源请求只发送源,并在协议降级时省略该头部。这是现代浏览器在未设置 Referrer-Policy 时的默认策略。
unsafe-url
unsafe-url 指令对每个请求都发送完整 URL(源、路径和查询字符串),无论目标或协议如何。这会暴露最多的信息,很少适用于生产环境。
示例
一条严格的默认策略,在跨源导航时只发送源:
Referrer-Policy: strict-origin-when-cross-origin
一种注重隐私的配置,禁止发送所有 referrer 数据:
Referrer-Policy: no-referrer
一条回退链,浏览器在支持时选取 strict-origin,否则回退到 no-referrer:
Referrer-Policy: no-referrer, strict-origin