为何含Cache-Control: public, max-age=86400的HTTP响应未被Cloudflare缓存?
问题分析:Cloudflare未缓存已设置Cache-Control的资源
可能的原因及排查方向
1. Cloudflare默认策略不缓存该内容类型
Cloudflare默认缓存逻辑对application/json这类动态内容不会自动缓存,即便源站返回了合规的Cache-Control头部。需检查:
- 页面规则中是否针对该资源路径/类型设置了缓存级别: 不缓存,需改为标准或缓存所有静态资源
- 是否创建自定义缓存规则,明确匹配
application/json类型并开启缓存
2. 请求方法非GET/HEAD
Cloudflare仅默认缓存GET和HEAD请求,若客户端发起POST、PUT等其他请求方法,会直接返回cf-cache-status: DYNAMIC,不会存储缓存。
3. Last-Modified与Date头部时间完全一致
你的源站返回的Last-Modified和Date时间完全相同(均为Tue, 24 Oct 2023 13:31:00 GMT),这会让Cloudflare判定资源为即时生成的动态内容,而非可缓存的静态资源。建议调整源站逻辑,将Last-Modified设为资源实际修改时间,而非请求时间。
4. 缓存规则路径匹配错误
若配置了自定义缓存规则,需确认规则的路径匹配范围是否覆盖当前请求的资源路径。比如规则仅匹配/static/*,但资源实际在/api/*路径下,就不会触发缓存行为。
5. 首次请求未完成缓存写入
第一次请求资源时,Cloudflare会从源站拉取内容并返回给客户端,此时缓存还未完成写入,会返回DYNAMIC。可尝试发起第二次相同请求,若返回HIT则属于正常流程;若仍为DYNAMIC则需排查其他原因。
6. Vary头部的潜在干扰
虽然Cloudflare支持Vary: Accept-Language,但如果客户端请求携带的Accept-Language值过于多样,可能导致缓存条目无法复用,但不会直接导致首次请求不缓存。若排除其他原因,可临时移除Vary头部测试是否能正常缓存。
内容的提问来源于stack exchange,提问作者Federico Stilman
相关产品推荐
相关产品推荐

