是唯一有效的 HTML 元标签,必须小写 origin 且置于 顶部;referrerpolicy 属性仅用于元素级,二者不兼容;HTTP 响应头 Referrer-Policy 优先级最高,覆盖所有请求类型,包括 JS 动态请求和错误页。

meta name="referrer" 和 referrerpolicy 是两套不兼容的机制
你不能在 <meta> 标签里写 referrerpolicy —— 浏览器会直接忽略。正确的属性名是 name="referrer",且只认 content 值为小写 origin、no-referrer 等有限枚举。如果写成 <meta name="referrerpolicy" content="origin">,它完全无效,浏览器按默认策略 no-referrer-when-downgrade 处理。
origin 必须用 ,且位置和拼写零容错
要让 origin 生效,必须满足三个硬性条件:
-
<meta name="referrer" content="origin">必须放在最顶部,早于任何<script></script>、<link>或其他可能触发请求的标签 -
content值严格小写:origin——Origin、ORIGIN、orgin全部静默失败,退回到默认策略 - 该 meta 只影响后续由 HTML 自动发起的请求:a 标签跳转、
<img src alt="HTML的meta中referrerpolicy设为origin怎么配置安全头" >、<script src></script>、<iframe src></iframe>、<form></form>提交(未显式设referrerpolicy时)
HTTP 响应头 Referrer-Policy 才是真正的“安全头”
所谓“安全头”,指的是服务器通过 HTTP 响应头统一控制所有请求行为,包括 JS 的 fetch()、动态创建的 <img alt="HTML的meta中referrerpolicy设为origin怎么配置安全头" >、CSS 中的 url() 等 <meta> 完全管不到的场景。Nginx 配置示例:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
注意 always 关键字 —— 它确保 4xx/5xx 错误页也生效,避免 /admin?token=xxx 这类路径在报错时意外泄露。这个头优先级高于所有 HTML 层设置,包括 <meta name="referrer"> 和元素级 referrerpolicy 属性。
立即学习“前端免费学习笔记(深入)”;
别指望 meta 覆盖全部,JS 请求必须单独处理
如果你页面里有类似这样的代码:
fetch("https://api.thirdparty.com/log", { method: "POST" });
那么 <meta name="referrer"> 对它毫无作用。必须显式传参:
fetch("https://api.thirdparty.com/log", {
method: "POST",
referrerPolicy: "origin"
});
同理,XMLHttpRequest、动态 document.createElement("img")、甚至 <iframe></iframe> 内部 JS 发起的请求,都不受 meta 控制 —— 它们要么靠响应头,要么靠 JS 层参数。
真正容易被忽略的是:右键“在新标签页中打开链接”完全绕过所有 HTML 层策略,浏览器按自身默认逻辑发 Referer;而 rel="noreferrer" 会强制覆盖同标签上的 referrerpolicy,导致策略失效。



















