meta name="referrer" 仅对 html 自动导航请求兜底,需置于后首个/前,值为枚举且拼错即失效;对 fetch、location 跳转、右键打开、iframe 等完全无效,优先级低于元素属性和响应头,后端 referrer-policy 才是唯一全覆盖方案。

它不能真正“全局”控制,只能对 HTML 自动发起的导航类请求兜底,且极易被忽略或覆盖。
meta name="referrer" 只在靠前位置才生效
浏览器解析到它就立即应用策略,后续动态插入(比如 JS 用 document.head.appendChild() 添加)基本无效。必须放在 <title></title> 后、首个 <link> 或 <script></script> 前——否则很多资源标签已开始加载, 就白写了。
- 错误写法:
里加,或等 DOMContentLoaded 后再注入 - 正确顺序示例:
<title>Page</title> <meta name="referrer" content="origin-when-cross-origin"> <link rel="stylesheet" href="app.css"> - 值必须是固定枚举,拼错(如
origin-when-crossorigin少个-)会被静默忽略,退回到默认的no-referrer-when-downgrade
它只管 HTML 自动触发的请求,不管 JS 和用户行为
meta name="referrer" 对以下场景完全无效:
-
fetch()或XMLHttpRequest—— 必须靠referrerPolicy选项或响应头 -
window.location.href = "https://target.com"跳转 —— Referer 按浏览器默认策略发 - 右键“在新标签页中打开”链接 —— 浏览器直接忽略 ,走自身策略
-
<iframe src="..."></iframe>加载 —— 即使加了referrerpolicy属性也得单独设, 不管
优先级低,容易被覆盖
元素级 referrerpolicy 属性优先级高于 meta;后端 Referrer-Policy 响应头又高于两者(no-referrer 除外)。这意味着:
- 全局设了
<meta name="referrer" content="origin">,但某个埋点图加了referrerpolicy="no-referrer",那这张图确实不发 Referer —— 这是设计行为,不是 bug - 如果 Nginx 配了
add_header Referrer-Policy "strict-origin-when-cross-origin" always;,那么所有本域发起的请求(包括 JS 的 fetch、字体加载、甚至 404 页面)都按响应头走, 彻底失效 -
rel="noreferrer"和referrerpolicy不能混用,否则行为不可预测
真正能覆盖全部请求类型的,只有后端响应头; 是个脆弱的兜底手段,别把它当主力。尤其在现代 SPA 或含大量 JS 请求的页面里,它几乎形同虚设。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











