目录

img 标签怎么去掉 Referer 请求头?一招搞定防盗链

加载别人服务器上的图片,结果浏览器控制台一片红,图片全裂成小方块。

八成是对方做了防盗链,靠检查 Referer 请求头来挡外站引用。

解决思路很直接:让 <img> 发请求时别带上 Referer

HTML 早就给了现成的属性,不用动后端。

先搞清楚 Referer 是什么

Referer 是一个 HTTP 请求头,告诉服务器「这个请求是从哪个页面发起的」。

你在 a.com 的页面里引用了 b.com/pic.jpg,浏览器请求这张图时,默认会带上 Referer: https://a.com/xxx

很多图床、CDN 就是靠它做防盗链:发现 Referer 不是自家域名,直接返回 403 或者一张「禁止盗链」的占位图。

说个冷知识,这个头在 HTTP 标准里拼错了,少了一个 r,正确拼写应该是 referrer。

但属性和策略名用的是正确拼写 referrer,请求头却一直将错就错叫 Referer

第一次写的时候我也愣了一下,以为自己手抖打错了。

核心方案:给 img 加 referrerpolicy

单张图片去掉 Referer,加一个属性就行:

<img src="https://b.com/pic.jpg" referrerpolicy="no-referrer">

referrerpolicy="no-referrer" 的意思是:请求这张图时,完全不发送 Referer 头。

服务器收到的请求里压根没这个字段,防盗链自然就拦不住了。

这是 W3C 的标准属性,Chrome、Firefox、Edge、Safari 现代版本全都支持。

IE 不支持,不过 2026 年了,应该没人还在管它。

整个页面统一处理:meta 标签

如果页面里图片很多,一个个加属性太累,可以在 <head> 里放一行:

<head>
  <meta name="referrer" content="no-referrer">
</head>

这条策略对整个页面的所有请求生效,包括图片、脚本、AJAX 等。范围更大,但要注意副作用。

两种方式的区别简单对比一下:

方式 作用范围 适用场景
<img referrerpolicy> 单个元素 只想处理某几张外链图片
<meta name="referrer"> 整个页面所有请求 全站图片都来自需绕过防盗链的源

我自己的习惯是优先用 img 属性。

页面级 meta 影响面太广,万一你的某个接口在后端靠 Referer 做安全校验,一刀切关掉可能把自己也坑了。

注意,如果你的网站有一些统计脚本、广告脚本,那么一定不能加这个,否则所有的统计和广告都会失效

Referrer-Policy 的取值有哪些

no-referrer 是最彻底的,但不是唯一选项。完整取值这里列全:

取值 行为
no-referrer 任何情况都不发送 Referer
no-referrer-when-downgrade HTTPS 跳 HTTP 时不发,其余照常(旧版默认值)
origin 只发送源(如 https://a.com/),去掉路径和参数
origin-when-cross-origin 同源发完整地址,跨源只发源
same-origin 同源才发,跨源不发
strict-origin 只发源,且 HTTPS 降级到 HTTP 时不发
strict-origin-when-cross-origin 现代浏览器默认值,平衡安全与可用
unsafe-url 始终发送完整地址(不推荐,泄露隐私)

绕过防盗链选 no-referrer 最稳。如果对方的校验比较松,只是不能接受跨域来源,用 origin 有时也够,但成功率不如直接清空。

实际踩过的坑

去年帮一个静态博客处理外链图片,加了 referrerpolicy="no-referrer" 之后大部分图能出来了,但有几张还是 403。

折腾了快一个小时才搞明白:对方那个 CDN 不光看 Referer,还校验了 User-Agent 和签名参数。这种情况下属性怎么改都没用,纯属人家防得更死。

所以这招的前提是:对方仅靠 Referer 做防盗链。它能解决的范围是有限的,不是万能钥匙。

还有一点容易忽略,动态插入的图片同样吃这个属性:

const img = document.createElement("img");
img.referrerPolicy = "no-referrer"; // 注意 JS 里是驼峰 referrerPolicy
img.src = "https://b.com/pic.jpg";
document.body.appendChild(img);

JS 属性名是驼峰的 referrerPolicy,HTML 属性是全小写的 referrerpolicy,别搞混。

常见问题

referrerpolicy 和 meta referrer 冲突时听谁的?

元素级的 referrerpolicy 优先级更高。

如果某张 <img> 单独写了属性,它会覆盖页面 meta 里的设置,只对这一个元素生效。

设了 no-referrer 还是加载不出图片,怎么回事?

说明对方防盗链不只看 Referer。

可能还校验了 Cookie、签名 token、User-Agent 等。这种情况前端搞不定,常见做法是自己搭一个图片代理服务中转。

这个属性安全吗?会泄露隐私吗?

恰恰相反,去掉 Referer 反而更保护隐私,对方拿不到你来自哪个页面。

要警惕的是 unsafe-url,它会把完整 URL(含参数)发出去,可能泄露敏感信息,别用。

移动端浏览器支持吗?

支持。

iOS Safari、Android Chrome 等主流移动浏览器都实现了这个属性,行为和桌面端一致。

小结

去掉 img 的 Referer,记住两个写法就够:单张图用 referrerpolicy="no-referrer",整页用 <meta name="referrer" content="no-referrer">

前者更精准,推荐优先用。

但它只对「仅靠 Referer 防盗链」的场景管用。遇到带签名、校验 UA 的硬核防护,老老实实上图片代理。

如果你在绕防盗链时遇到了别的奇葩情况,或者对某个取值还有疑问,欢迎在评论区聊聊~~~

版权声明

未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!

本文原文链接: https://fiveyoboy.com/articles/img-referrerpolicy-remove-referer/

备用原文链接: https://blog.fiveyoboy.com/articles/img-referrerpolicy-remove-referer/