用 Referer 测防盗链:为什么直接打开是 403
用户发来一张图,说「这个链接打不开」。你点开,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 是这类事故的高发原因。