strict-origin-when-cross-origin
时间: 2025-08-07 10:58:11 AIGC 浏览: 67
`strict-origin-when-cross-origin` 是 HTTP 请求头 `Referer` 策略的一种取值,用于控制浏览器在发起请求时是否发送 `Referer` 头,以及发送的内容。
---
## ✅ 什么是 `Referer`?
`Referer` 是 HTTP 请求头的一部分,用于告诉服务器当前请求是从哪个页面发起的。例如:
- 从 `https://a.com/page1` 点击链接跳转到 `https://b.com/page2`
- 浏览器会带上 `Referer: https://a.com/page1`
这在日志分析、防盗链、安全审计等场景中非常有用。
---
## ✅ `strict-origin-when-cross-origin` 的行为说明
这是现代浏览器中默认使用的 `Referer` 策略,它的行为如下:
| 请求场景 | 是否发送 Referer | Referer 内容 |
|----------|------------------|--------------|
| 同源(Same Origin) | ✅ 发送 | 完整 URL(如 `https://example.com/path?query`) |
| 跨源(Cross Origin)且协议安全(HTTPS ➝ HTTPS) | ✅ 发送 | 只发送源(Origin),即 `https://example.com` |
| 跨源且协议不安全(HTTPS ➝ HTTP) | ❌ 不发送 | 无 |
| 使用 `meta referrer` 设置该策略的页面发起请求 | ✅ 按策略执行 | 按上述规则 |
---
## ✅ 与其他 `Referer` 策略对比
| 策略 | 行为 |
|------|------|
| `no-referrer` | 从不发送 Referer |
| `no-referrer-when-downgrade`(旧默认) | 默认发送完整 Referer,但如果 HTTPS ➝ HTTP 则不发送 |
| `same-origin` | 同源才发送 Referer |
| `origin` | 总是发送源(Origin)而不是完整 URL |
| `strict-origin` | 跨源时只发送 Origin,HTTPS ➝ HTTP 不发送 |
| `origin-when-cross-origin` | 同源:完整 URL;跨源:Origin |
| ✅ `strict-origin-when-cross-origin` | **同源:完整 URL;跨源且 HTTPS:Origin;HTTPS ➝ HTTP:不发送** |
---
## ✅ 如何设置 `Referer` 策略?
### 1. 通过 HTTP 响应头设置(推荐)
```http
Referrer-Policy: strict-origin-when-cross-origin
```
你可以在 Nginx、Apache、Node.js、Java 等服务器中设置这个头。
#### ✅ 在 Nginx 中设置:
```nginx
add_header Referrer-Policy "strict-origin-when-cross-origin";
```
#### ✅ 示例完整配置片段:
```nginx
server {
listen 80;
server_name example.com;
location / {
add_header Referrer-Policy "strict-origin-when-cross-origin";
proxy_pass http://backend;
}
}
```
---
### 2. 通过 HTML `<meta>` 标签设置(仅对页面内请求有效)
```html
<meta name="referrer" content="strict-origin-when-cross-origin">
```
> ⚠️ 注意:这种方式只对当前页面发起的请求有效,不能控制所有子资源。
---
## ✅ 使用场景和推荐
| 场景 | 推荐策略 |
|------|----------|
| 默认现代网页 | ✅ `strict-origin-when-cross-origin`(最安全) |
| 防盗链需求 | `no-referrer` 或 `strict-origin` |
| 同源系统内部使用 | `same-origin` |
| 完全不关心 Referer | `no-referrer` |
---
## ✅ 示例:浏览器行为演示
| 当前页面 URL | 请求的目标 URL | Referer 是否发送? | Referer 内容 |
|---------------|------------------|---------------------|----------------|
| `https://a.com/page1` | `https://a.com/page2` | ✅ | `https://a.com/page1` |
| `https://a.com/page1` | `https://b.com/page` | ✅ | `https://a.com` |
| `https://a.com/page1` | `http://b.com/page` | ❌ | 无 |
| `http://a.com/page1` | `https://b.com/page` | ✅ | `http://a.com` |
---
## ✅ 总结
| 策略 | 优点 | 缺点 |
|------|------|------|
| `strict-origin-when-cross-origin` | 安全性高,兼顾隐私和功能 | 某些旧系统可能依赖完整 Referer |
---
##
阅读全文
相关推荐














