same-origin 在 中无效,浏览器直接忽略并退回到默认策略 no-referrer-when-downgrade;html 规范仅支持特定值,same-origin 不在其中,写错会导致整个 meta 标签被静默忽略。

same-origin 在 <meta name="referrer"> 中**根本无效**——浏览器会直接忽略它,退回到默认策略 no-referrer-when-downgrade。
为什么 same-origin 不生效
HTML 规范明确限定:<meta name="referrer"> 只支持以下值:no-referrer、no-referrer-when-downgrade、origin、origin-when-cross-origin、strict-origin-when-cross-origin、unsafe-url。其中不包含 same-origin。
写错或用不存在的值(如 same-origin、strict-origin、always)会导致整个 meta 标签被浏览器静默忽略,等效于没写。
- Chrome、Firefox、Edge 现代版本均不识别
same-origin作为meta的 content 值 - Safari 甚至对部分合法值(如
strict-origin-when-cross-origin)也存在兼容性问题,更不会处理非法值 - 即使你看到同源跳转后
document.referrer有值,那也不是因为这个 meta 生效了,而是浏览器默认行为(同域导航本就传完整 referrer)
同源跳转想“保留来源信息”,其实不用做任何事
同源跳转(比如从 https://a.com/page1 到 https://a.com/page2)时,浏览器默认就会发送完整 Referer 头,目标页也能读到完整的 document.referrer —— 这是规范行为,无需额外设置。
真正需要干预的是跨域或降级场景,比如:
- 从 HTTPS 页面跳到 HTTP 页面 → 默认不发
Referer(安全限制) - 从
https://a.com跳到https://b.com→ 默认发完整 URL,但你可能只想发https://a.com - 不想让第三方知道具体路径或参数 → 需用
origin或origin-when-cross-origin
真要精细化控制同源/跨域行为,别靠 meta
<meta name="referrer"> 是粗粒度兜底,只影响 HTML 自动发起的请求(<a></a>、<img>、<script></script> 等),且不支持 same-origin 这类策略。
如果业务逻辑里需要区分同源/跨域并差异化处理,正确做法是:
- 对链接加
referrerpolicy属性:<a href="..." referrerpolicy="origin-when-cross-origin"></a> - 对表单提交加属性:
<form action="..." referrerpolicy="same-origin"></form>(注意:same-origin在referrerpolicy属性中是合法的) - JS 发起的请求必须显式传参:
fetch(url, { referrerPolicy: 'same-origin' }) - 全局策略统一用响应头:
Referrer-Policy: same-origin(服务端设置,覆盖所有外发请求)
最常被忽略的一点:meta 和 referrerpolicy 属性共存时,后者优先;但 same-origin 这个值在 meta 里压根不被解析,所以别试。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











