Referrer-Policy: strict-origin-when-cross-origin
是一种现代浏览器支持的引用来源(Referer)控制策略,用于决定在跨域请求中如何发送 Referer
请求头。
🔍 strict-origin-when-cross-origin
政策详解
✅ 行为说明:
该策略是 默认行为(在大多数现代浏览器中),其逻辑如下:
请求类型 | 是否发送 Referer | Referer 内容 |
---|---|---|
同源请求(Same-origin) | ✅ 发送 | 完整 URL(包括路径和查询参数) |
跨源请求(Cross-origin)且安全上下文(HTTPS → HTTPS) | ✅ 发送 | 仅发送源地址(Origin:协议 + 域名 + 端口) |
跨源请求且从 HTTPS 发起 HTTP 请求(不安全降级) | ❌ 不发送 | 无 |
📋 示例场景
场景 | 请求目标 | Referer 值 |
---|---|---|
从 https://a.com/page1 跳转到 https://a.com/page2 | 同源 | https://a.com/page1 |
从 https://a.com/page1 请求 https://b.com/api | 跨源(HTTPS→HTTPS) | https://a.com |
从 https://a.com/page1 请求 http://b.com/api | 跨源且降级 HTTP | 无 Referer |
💡 与其他常见策略对比简表
Referrer Policy | 同源行为 | 跨源(HTTPS→HTTPS) | 跨源降级(HTTPS→HTTP) |
---|---|---|---|
no-referrer | 无 | 无 | 无 |
no-referrer-when-downgrade | 完整 URL | 完整 URL | 无 |
same-origin | 完整 URL | 无 | 无 |
origin | 仅源 | 仅源 | 仅源 |
strict-origin | 仅源 | 仅源 | 无 |
strict-origin-when-cross-origin | 完整 URL | 仅源 | 无 ✅(最安全) |
🛡️ 推荐使用场景
- 前后端分离项目
- 防止敏感路径泄露
- 确保跨域请求不携带完整路径信息
🧩 如何设置?
在 HTTP 头中配置:
Referrer-Policy: strict-origin-when-cross-origin
在 HTML 页面中通过 <meta>
标签设置(适用于文档范围):
<meta name="referrer" content="strict-origin-when-cross-origin">
✅ 总结
strict-origin-when-cross-origin
是一个兼顾安全与功能性的推荐策略:
- 保留同源请求的详细上下文;
- 对跨源请求仅暴露源地址;
- 在降级请求时不暴露任何信息,防止信息泄露。
适用于大多数 Web 应用的安全场景。