用户发来一张图,说「这个链接打不开」。你点开,403。回到站内刷新,图片好好地在那儿。

这不是玄学,是服务端在看 Referer。

原理很短

浏览器请求图片时,会带一个 Referer 头,说明「我是从哪个页面点过来的」。防盗链就是检查这个字段:来源在允许列表里,给内容;不在,或者干脆没有,拒绝。

你在地址栏直接粘贴 URL,浏览器不发 Referer。于是被判为盗链,403。

用测速复现这个过程

在 网站测速 的高级选项里填上 Referer,比如 https://www.example.com/,测一次。再留空测一次。

带 Referer 返回 200、不带返回 403,防盗链确认。两次都 403,那就不是 Referer 的问题,去看 UA 或者 IP 白名单。两次都 200,说明服务端对空 Referer 是放行的,用户遇到的 403 另有原因。

容易误判的几种情况

CDN 层和源站层可能各有一套规则。你在源站关了防盗链,CDN 上还开着,测出来照样 403。查的时候两层都要看。

有些配置对空 Referer 是放行的(valid_referers none),这种站直接打开反而正常,从第三方站跳过来才被拦。所以「直接打开正常」不能证明没有防盗链。

还有一种是 Referer 白名单里写了 *.example.com,但实际请求的域名是裸域,匹配不上。这类问题只能靠实际测试发现,看配置文件容易漏。

测完记得回到业务

确认是防盗链之后,决策就不是技术问题了:要不要给这个来源放行、要不要改成签名 URL、要不要对空 Referer 放行。

如果决定放行某个 IP 段,先用 IP 查询 确认对方真实的出口 IP,再往白名单里加。凭印象填 IP 是这类事故的高发原因。