Google Cloud CDN返回304 Not Modified时不覆盖Cache-Control是否为规范?
结论
你遇到的是Google Cloud CDN的既定设计行为,并非配置错误或产品故障。
原因说明
- 你当前配置的
CACHE_ALL_STATIC缓存模式下,CDN仅会对返回完整响应体的200、206等成功状态码应用cdnPolicy中的clientTtl规则,覆盖源站返回的Cache-Control头,这和你观测到的首次200响应表现一致。 - 对于304 Not Modified响应,Google Cloud CDN当前默认逻辑为直接透传后端源站(即你的Cloud Storage存储桶)返回的响应头,不会触发
clientTtl的覆盖逻辑,因此会返回存储桶对象元数据中设置的max-age=31536000。
解决方案
你可以任选以下一种方式修正该问题:
- 直接修改存储桶对象的
Cache-Control元数据为max-age=0。由于CACHE_ALL_STATIC模式下CDN内部缓存时长由defaultTtl/maxTtl决定,优先级高于源站max-age,因此该修改不会影响CDN侧的缓存策略,仅会影响返回给客户端的头信息。 - 为该后端存储桶绑定Cloud CDN自定义响应头规则,新增全局规则强制覆盖所有状态码响应的
Cache-Control头为max-age=0,该规则对304响应同样生效。
内容的提问来源于stack exchange,提问作者ryosuke
相关产品推荐
相关产品推荐

