strict-origin-when-cross-origin才是可靠保留基本源的策略,因它同源发完整URL、跨源HTTPS仅发origin、HTTPS→HTTP完全不发Referer,兼顾功能与安全。

referrerpolicy="origin-when-cross-origin" 能否在跨域时保留基本源
不能。这个值在跨域请求中确实只发 origin(协议+域名+端口),但它不是最稳妥的选择——它在同源时发完整 URL,跨域时发 origin,但对 HTTPS→HTTP 降级场景不做限制,仍会发 origin,存在明文泄露风险。真正“保留基本源且兼顾安全”的是 strict-origin-when-cross-origin。
为什么 strict-origin-when-cross-origin 才算可靠保留基本源
它明确区分三种情况,行为可预测:
- 同源跳转或资源加载 → 发完整 URL(不影响内部统计和路由)
- 跨源 HTTPS 请求(如父页
https://a.com/page?token=abc加载 iframehttps://b.com/widget)→ Referer 头只含https://a.com,路径和 query 参数彻底消失 - HTTPS → HTTP 跨域(如加载
http://legacy-cdn.com/img.jpg)→ Referer 字段完全不发送,避免敏感来源明文暴露
对比 origin-when-cross-origin,后者在 HTTPS→HTTP 场景下仍发 https://a.com,而浏览器会把该值以明文发到 HTTP 连接上,属于隐蔽但真实的风险点。
referrerpolicy 属性加在哪才生效
必须直接写在 <iframe> 标签上,其他位置无效:
立即学习“前端免费学习笔记(深入)”;
- ✅ 正确:
<iframe src="https://thirdparty.com/widget" referrerpolicy="strict-origin-when-cross-origin"></iframe> - ❌ 错误:
<div referrerpolicy="strict-origin-when-cross-origin"><iframe src="..."></div>(属性被忽略) - ❌ 错误:
<meta name="referrer" content="strict-origin-when-cross-origin">(该标签对 iframe 加载行为无效)
注意:这个属性只控制 iframe 内部发起的请求(比如它自己加载的 <img>、<script>),不控制父页面加载该 iframe 时的 Referer —— 那个行为由父页面的 HTTP 响应头 Referrer-Policy 决定。
旧版 Safari 兼容性与服务端兜底怎么做
Safari ≤15.4 完全忽略 referrerpolicy 属性,此时 iframe 内部所有跨域请求都会回退到浏览器默认策略 no-referrer-when-downgrade,导致完整 URL 泄露。
- 必须在服务端统一配置响应头:
Referrer-Policy: strict-origin-when-cross-origin - Nginx 示例:
add_header Referrer-Policy "strict-origin-when-cross-origin"; - 若第三方 iframe 提供方要求你隐藏来源,仅靠前端加属性做不到;必须后端响应头生效,才能覆盖浏览器默认行为
真正起作用的 Referer 控制点有两个:一个是父页面返回时的响应头(管 iframe 主文档加载),一个是 iframe 标签上的 referrerpolicy(管它内部子资源)。漏掉任何一个,都可能在某类请求里暴露完整路径或参数。



















