外链图片加速的落地页检查,核心是确认图片请求经过的每一跳是否可控、最终返回的是图片本身而不是HTML页面。起点很简单:用浏览器开发者工具的Network面板打开禁用缓存选项,刷新页面,找到图片请求,查看Status、Type和Response Headers。如果Status是301或302,说明存在跳转链;如果Type是document而不是image,说明落地页返回了错误内容。下面给出一份可执行清单,每项说明查什么、怎么查、结果说明什么。
查什么:图片URL从初始地址到最终响应,中间经过几次重定向。怎么查:在Network面板勾选Preserve log,点击图片请求,查看Headers中的Request URL与General里的Remote Address;若存在Location响应头,说明发生了跳转。也可以用命令行工具核对:
curl -I -L "https://example.com/pic.jpg"
结果说明什么:输出中出现多个HTTP状态行,每个3xx后面跟一个Location,就是跳转链。跳转次数越多,首字节时间越容易被拉长;如果最终状态不是200,说明落地页没有正常返回图片。适用条件:该方法对外链图片和自建图片都适用,但需要能访问目标地址。
查什么:每一跳是否从HTTPS降到HTTP,主机名是否跨域。怎么查:把curl输出里的Location逐个抄下来,对比协议和域名。结果说明什么:HTTPS页面引用HTTP图片,浏览器会按混合内容处理,可能拦截或警告;跨域跳转还会多一次DNS解析和连接建立。判断结果:如果中间跳转经过一个与最终图片无关的域名,先确认这个域名是否由你控制,不可控的跳转链不适合作为长期加速方案。
查什么:最终响应的Content-Type是否为image/*。怎么查:在Network面板看Response Headers里的Content-Type,或用curl只取头部:
curl -I "https://example.com/pic.jpg"
结果说明什么:返回Content-Type: text/html说明落地页把图片请求导向了一个网页,常见于防盗链拦截、登录跳转或错误页。这种情况浏览器不会渲染图片,外链图片加速也就无从谈起。适用条件:有些服务对未携带Referer的请求返回占位图,需要带Referer再测一次对比。
查什么:最终响应是否带有Cache-Control、ETag或Last-Modified。怎么查:看Response Headers中的缓存相关字段。结果说明什么:缺少Cache-Control且带有no-store,意味着每次访问都要回源,加速效果有限;带有较长的max-age或immutable,说明浏览器和中间节点可以复用。判断结果:如果跳转链本身不可缓存,而最终图片可缓存,那么首次请求慢、后续请求快,这属于可接受的情况。
把初始URL、每一跳的状态码与Location、最终Content-Type、缓存字段抄进一张表,隔一段时间用相同命令复测一次。对比两次结果:跳转链是否变化、落地页是否稳定返回图片。如果第一次测试就发现落地页返回HTML,下一步是联系图片所在服务的维护方确认防盗链规则,或改用你能够控制响应头的图片地址;如果只是跳转次数偏多,下一步是评估能否把跳转规则前置到源站配置里,减少一次往返。