referrer="origin"使浏览器在跳转或资源请求时仅发送协议+域名+端口(如https://example.com),不带路径、查询参数和锚点;需用<meta name="referrer" content="origin">置于<head>最前,小写拼写,仅影响导航及静态资源请求,不控制fetch等JS请求。

referrer="origin" 是什么行为
它会让浏览器在跳转或资源请求时,只发送来源页面的协议+域名+端口(比如 https://example.com:8080),不带路径、查询参数和锚点。这比默认的 no-referrer-when-downgrade 更保守,也比 unsafe-url 更安全。
怎么写才生效
必须用 <meta> 标签且放在 <head> 最前面,否则可能被后续脚本或标签覆盖:
<meta name="referrer" content="origin">
注意:name 是 referrer,不是 referrerpolicy;后者是现代标准,但老浏览器(如 IE、旧版 Safari)只认前者。两者不能混用,否则行为不可预测。
- 如果同时存在
<meta name="referrer">和<meta name="referrerpolicy">,多数浏览器以referrerpolicy为准,但 Safari 12–13 会忽略后者,只认前者 -
content值区分大小写,"Origin"或"ORIGIN"都无效,必须小写"origin" - 该 meta 只影响当前页面发起的**导航请求**(a 标签跳转、location.href 改变等)和**同域/跨域资源请求**(img、script、iframe 等),不影响 fetch / XMLHttpRequest 的 referrer 行为(它们走 JS 层 referrerPolicy 参数)
和 referrerPolicy 属性冲突怎么办
当页面里既有 <meta name="referrer">,又有元素级 referrerpolicy 属性(比如 <img referrerpolicy="no-referrer">),元素属性优先级更高。但要注意:
立即学习“前端免费学习笔记(深入)”;
-
<a href="..." referrerpolicy="origin">在 Chrome/Firefox 中有效,在 Safari 中被忽略(Safari 目前不支持 a 标签的 referrerpolicy) - fetch 请求不受 meta 影响,必须显式传
{referrerPolicy: 'origin'} - 如果服务端设置了
Referrer-Policy: strict-originHTTP 头,它会覆盖所有 HTML meta 设置(HTTP 头优先级最高)
验证是否生效的简单方法
打开开发者工具 → Network 标签 → 点击一个跳转链接或加载一张跨域图片 → 查看请求头里的 Referer 字段:
- 期望看到类似
https://example.com/(结尾斜杠可有可无,但绝不会出现/path?x=1#hash) - 如果仍是完整 URL,检查是否 meta 写错位置、拼写错误,或被 CSP 的
reflected-xss策略干扰 - 用
document.referrer获取的是 JS 可读的 referrer,它受 meta 控制,但值是字符串,不会自动截断——它反映的就是实际发出的 Referer 头内容
真正容易被忽略的是:这个设置对 WebSocket、postMessage、iframe 的 srcdoc 加载等场景完全不生效,它们走各自独立的引用策略逻辑。



















