content="never"已失效,必须用content="no-referrer",否则浏览器静默降级为no-referrer-when-downgrade,导致HTTPS→HTTPS跳转仍发完整Referer,防盗链失效。

直接说结论:content="never" 已失效,必须用 content="no-referrer",否则浏览器静默降级为 no-referrer-when-downgrade,防盗链大概率白配。
为什么 content="never" 不再起作用
这是个历史遗留坑:早期文档里写的 never 是旧规范值,2016 年 W3C 统一 Referrer Policy 后,never 就被移出标准。所有现代浏览器(Chrome 59+、Firefox 60+、Edge 79+、Safari 11.1+)遇到 content="never" 都当非法值处理,自动 fallback 到 no-referrer-when-downgrade —— 这意味着 HTTPS → HTTPS 跳转时仍会发完整 Referer,防盗链直接失效。
更麻烦的是:浏览器不报错、不警告,只默默降级。你看到图片 403 了,却查不到原因。
- 检查方式:打开 DevTools → Network → 点开某张图请求 → 查 Request Headers 里的
Referrer-Policy字段是否显示no-referrer - 如果显示
no-referrer-when-downgrade或压根没这个字段,基本就是never写错了 - 旧版 Safari 或某些 WebView 可能直接忽略该 meta,退回到默认策略
meta name="referrer" 的生效范围很窄
它只管 HTML 自动触发的资源加载,比如 <img src>、<script src>、CSS 里的 background: url()、<iframe src>(但需配合 referrerpolicy 属性),对 JS 主动发起的请求完全无效。
立即学习“前端免费学习笔记(深入)”;
- ✅ 生效:
<img src="https://cdn.example.com/1.jpg"> - ❌ 不生效:
fetch("https://api.example.com", { referrerPolicy: 'no-referrer' })必须显式传参 - ❌ 不生效:
window.location.href = "https://target.com"—— Referer 仍走浏览器默认策略 - ❌ 不生效:用户右键“在新标签页中打开链接”,浏览器直接无视 meta
- ⚠️ 注意:
meta优先级低于元素级referrerpolicy属性,比如<img referrerpolicy="no-referrer">会覆盖 meta
怎么配才真正防住微信等平台的图片防盗链
光加 <meta name="referrer" content="no-referrer"> 往往不够,尤其目标资源(如微信公众号图片)校验的是完整 Referer 字符串,甚至还会看 User-Agent 或是否来自微信内置浏览器。
- 必须把 meta 放在
<head>最前面,最好紧贴<title>后面 —— 解析到就生效,后面插入的无效 - 如果页面是 HTTPS,而图片是 HTTP,
no-referrer-when-downgrade默认就会清 Referer,此时额外设no-referrer反而多余 - 微信图片常同时校验 Referer 和 User-Agent,单靠禁 Referer 无法绕过;得配合服务端代理或 CORS 处理
- 验证是否生效:用手机微信打开页面,Network 里点开图片请求,确认 Request Headers 中
Referer字段为空
最易被忽略的一点:Referrer Policy 不是“开关”,而是策略选择。写错值(比如 origin-when-crossorigin 少个 -)、放错位置、混用 JS 跳转,都会让防盗链形同虚设。别指望一行 meta 解决所有问题。



















