直接答案:对 25 个装备企业官网各取 DOM 顺序第一张 img:2 个首页没有图片、23 个有 URL。23 个 URL 中 20 个返回 200、2 个 567、1 个 404;20 个 200 里只有 19 个 Content-Type 是 image/*,另 1 个是 text/html。19 张可用图中,PNG 16、JPEG 2、SVG 1;11 张有正 max-age、8 张没有 Cache-Control。扩展到每页前 4 张后:94 个位置中 68 个 200(64 张 image/*)、19 个 567、4 个 404、1 个请求错误、2 页无图;64 张可用图中 32 张可缓存、32 张没有 Cache-Control。

11 张可缓存图片的 max-age:14 天 4、30 天 3、一年 3、5 分钟 1,中位 30 天。19 张可用图都带 Last-Modified 与 ETag,但验证器不能替代显式 max-age;没有 Cache-Control 的 8 张只能依赖启发式缓存。

64/94
前四张可用图
19
567
32
无 Cache-Control
30d
可缓存 max-age 中位

方法:首图,HEAD 优先,GET 兜底

复用第 4 期 25 个首页缓存,按 DOM 顺序取第一个非 data:/blob:/javascript: 的 img src;不判断它是不是产品主图。2026-11-07 23:41 逐条请求一次,HEAD 优先,带 Accept-Encoding: gzip, br 与 Referer;HEAD 返回 400/403/405/501 或连接失败时改用 GET。记录状态、方法、Cache-Control、max-age、ETag、Last-Modified、Vary、Content-Encoding、Content-Type、长度、Age、Server 与 CDN 标记。

“可用图”要求 200 且 Content-Type 为 image/*;200 的 HTML 不计。缓存分类:max-age > 0 可缓存;no-store/private/no-cache 私有不缓存;max-age=0 单列;无头 missing。

项数量
首页样本25
有 img URL23
没有图片2(E18、E20)
20020
200 且 image/*19
200 但是 HTML1(E17)
5672(E09、E22)
4041(E24)
可缓存(可用图)11
无 Cache-Control(可用图)8

结果:19 张可用图,11 张可缓存

页状态 / 类型策略 / max-age来源
E01200 image/pngmissing / —站内
E02200 image/pngmissing / —站内
E03200 image/pngcacheable / 14d站内
E04200 image/pngcacheable / 1y站内
E06200 image/pngcacheable / 14d站内
E08200 image/pngmissing / —站内
E09567 text/markdownmissing / —站外
E11200 image/pngcacheable / 30d站内
E12200 image/pngcacheable / 30d站内
E13200 image/pngmissing / —站内
E14200 image/pngcacheable / 14d站内
E16200 image/pngcacheable / 1y站外
E17200 text/htmlmissing / —站内
E18无图片——
E19200 image/pngmissing / —站内
E20无图片——
E22567 text/markdownmissing / —站外
E23200 image/pngcacheable / 14d站内
E24404 text/htmlprivate / —站内
E25200 image/pngcacheable / 1y站内
E26200 image/pngmissing / —站内
E27200 image/pngmissing / —站内
E28200 image/pngcacheable / 30d站内
E29200 image/pngcacheable / 5m站内
E30200 image/pngmissing / —站内

19 张可用图中,PNG 16、JPEG 2、SVG 1;11 张可缓存、8 张没有 Cache-Control。3 张首图来自站外:E09、E22 都是 567,E16 是 200 且一年 max-age。E17 的首图 URL 返回 200 但 Content-Type 是 text/html,不是图片;E24 的 404 带 private/no-cache。

扩展到前四张:64/94 可用,19 个 567

为看后续图片是否更差,对同 25 页按 DOM 顺序各取前 4 个唯一 img src,共 94 个位置(E18/E20 无图,共 2 个空位;其余 23 页各 4 个)。2026-11-08 00:42 逐条请求一次,方法与首图相同。

结果:68 个 200、19 个 567、4 个 404、1 个请求错误。68 个 200 中 64 张是 image/*(PNG 41、JPEG 19、SVG 4),4 张是 200 HTML(E17 的 4 张)。19 个 567 全部来自 H1 外链:E03/E06/E09/E14/E23 各 3 张、E22 4 张;E24 的 4 张都是 404;E04 第 4 张因 URL 非 ASCII 的请求头编码失败,记 error。

64 张可用图中 32 张有正 max-age、32 张没有 Cache-Control;可缓存 max-age 为 30 天 12、一年 11、14 天 5、5 分钟 4,中位 30 天。68 个 200 中 64 个有 ETag/Last-Modified,但验证器仍不能替代显式 max-age。

页可用图567404 / 错误可缓存无 CC
E0140004
E0240004
E0313010
E04301 错误30
E0613010
E0840004
E0913010
E1140040
E1240040
E1340004
E1413010
E1640040
E17000(4 个 200 HTML)00
E1800000
E1940004
E2000000
E2204000
E2313010
E2400400
E2540040
E2640004
E2740004
E2840040
E2940040
E3040004

关键变化:首图只有 2 个 567,前 4 张增到 19 个;E03/E06/E14/E23 都是“1 张站内 + 3 张 H1 567”,E22 四张全是 567。首图可用不等于第 2–4 张可用;只看首屏第一张会低估外链图片问题。

三个容易误判的点

  1. 200 不等于图片。 E17 返回 200 但正文是 HTML;只看状态会把可用图从 19 高估到 20。要同时看 Content-Type 与 magic bytes。
  2. 567 不是缓存策略问题。 E09、E22 的 567 是 29–30 字节 text/markdown,没有图片字节,也没有 Cache-Control;不能把 567 当成“不可缓存图片”。
  3. 有 ETag 不等于有 max-age。 19 张可用图都带 Last-Modified 与 ETag,但 8 张仍没有 Cache-Control;验证器只解决“变没变”。

对验收的启示

  1. 首图先验 Content-Type 与字节。 200 + image/* 才算可用;200 HTML、567 与 404 分开记。
  2. 给图片显式 Cache-Control。 19 张可用图里 8 张没有该头;至少区分带指纹的图片与可替换的运营图。
  3. 长缓存要配版本化 URL。 11 张可缓存图里 3 张一年、3 张 30 天;没有指纹时,长缓存会增加换图成本。
  4. 站外图要单独看。 3 张站外首图里 2 张 567;CDN 变更会直接影响首屏。
  5. 首图不等于全部图片,也不等于前四张。 前 4 张里 567 从 2 个增到 19 个;958 张全量仍需另测。

局限

  • 25 站 pilot:同一批首页缓存;不是行业总体,也不代表全部 958 张图片。
  • 只取前四张:25 页 × 4 个位置,共 94 个;不代表产品主图或全部 958 张;1 个 URL 请求错误。
  • HEAD 优先:E19、E29 用 GET 兜底;方法逐行记录,不把工具失败当策略。
  • 单次快照:2026-11-07 23:41;未复测改版、CDN 边缘或不同地区。
  • 只看响应头:不测 TTFB、渲染、LCP 或浏览器缓存命中。

数据与复算

匿名数据:equipment-homepage-first-image-cache-2026.csv(25 行 × 19 列:是否找到、站外、状态、方法、Cache-Control、策略、max-age、ETag、Last-Modified、Vary、编码、Content-Type、长度、Age、Server、CDN、错误、时间)。仓库内为 docs/research/2026-11-homepage-first-image-cache.csv。前四张扩展:equipment-homepage-first-four-images-2026.csv(94 行 × 19 列:图片序号、站外、状态、方法、Cache-Control、策略、max-age、ETag、Last-Modified、Vary、编码、Content-Type、长度、Age、Server、CDN、错误、时间)。仓库内另存 docs/research/2026-11-homepage-first-four-images.csv。

采集:Python urllib,HEAD 优先、GET 兜底,带 Accept-Encoding: gzip, br 与 Referer;策略分类复用 scripts/cache_compression_probe.py 的 evaluate()。站点与完整 URL 不公开。

配套:首页静态资源清单 pilot、首页 CSS/JS 缓存头 pilot、首页图片交付 pilot。

数据来源与口径

  1. 样本:第 4 期 25 个首页缓存(2026-10-31);每页 DOM 第一张 img。
  2. 请求:2026-11-07 23:41,HEAD 优先、GET 兜底,25 次。
  3. 可用图:200 且 Content-Type 为 image/*;200 HTML、567、404 分开记。

常见问题

200 就代表图片可用吗?

不代表。E17 的 4 张图都返回 200 但 Content-Type 是 text/html;必须同时看 image/* 与字节。

为什么会有 19 个 567?

6 个站点的 19 张外链图都是 H1 主机:E03/E06/E09/E14/E23 各 3 张,E22 4 张;首图可用不代表第 2–4 张可用。

64 张可用图的缓存策略如何?

32 张有正 max-age、32 张没有 Cache-Control;可缓存 max-age 中位 30 天(30 天 12、一年 11、14 天 5、5 分钟 4)。

ETag / Last-Modified 能替代 Cache-Control 吗?

不能。68 个 200 里 64 个有 ETag/Last-Modified,但 32 张可用图仍没有显式 max-age;验证器只解决资源是否变化。

1 个错误是什么?

E04 的第 4 张图 URL 含非 ASCII 字符,请求头编码失败;记为 error,不写成 404 或 567,也不推断服务器。

为什么每页只取前 4 张?

25 页 × 4 张,共 94 个位置;能看首屏一组图片,但不等于全部 958 张,也不判断主图语义。

为什么只测首图?

本轮同时保留首图基线和前 4 张扩展;前 4 张用于看后续图片是否更差,不是全站总量。

数据能复核吗?

可以。25 行首图 CSV 与 94 行前四张 CSV 都在仓库;状态、方法、Cache-Control、max-age、ETag、Last-Modified、Vary、编码、Content-Type 与错误逐条记录;站点与完整 URL 不公开。

相关:首页 canonical 与 og:url pilot。

关于作者

凌壹信息Official(交付团队),负责企业网站、品牌与智能制造项目的需求梳理、方案与验收协作。本文只记录 25 个首页第一张图片的可用性与缓存响应头,不判断图片内容、尺寸、版权或渲染;25 站 pilot,不外推行业。

首图先验可用,再谈缓存

19/25 可用图;11 个可缓存、8 个无 Cache-Control。

预约内容验收方案