在 Google App Engine flexible 上,什么缓存了 s-maxage 的响应以及如何清除该缓存?

On Google App Engine flexible, what caches responses with s-maxage and how to I clear that cache?

我在 App Engine 灵活的自定义 Java 容器中有一个应用程序 运行。我一直在努力找出为什么我收到的响应过时,我将问题缩小到正在缓存的响应上。

我知道我们的应用程序不会返回陈旧的内容,因为我们没有共享缓存,并且在我们重新部署后陈旧的响应仍然存在。我们也没有使用 Cloud CDN。

当我在 https://[app-id].appspot.com/api/123 处点击应用程序的 API 时,我的应用程序 returns 响应 Cache-Control: public, s-maxage=31536000, max-age=3600 header。 s-maxage 旨在告诉 Cloudflare(我们的 CDN)缓存响应,我们在更新内容时手动清除 Cloudflare 的缓存。但是,我们应用程序前面的某些东西似乎正在缓存响应。在缓存的响应中,日期响应 header 保持不变,但年龄增加,表明内容确实过时。

我在 app.yaml 的 App Engine 标准文档中看到了有关缓存的文档,但我在 App Engine 灵活文档中找不到任何关于缓存基础结构的提及。我的心智模型是只有 HTTPS 负载平衡代表应用程序发生,但事实并非如此。

如果我尝试通过 SSH 连接到 Compute Engine 实例或 App Engine Flexible 实例,从 GCP 中重现此问题,我没有观察到任何缓存。但是,我已经从其他云和笔记本电脑上尝试过,缓存是一致的。 Cloudflare 支持人员最初提醒我们注意此行为,他们正在从他们的生产数据中心查看缓存,这些数据中心通过他们的 CDN 互连程序直接与 Google 对等。

这一定来自 Google 的基础设施本身,可能是用于 App Engine 的隐藏 Google 云负载平衡器,因为连接已加密。

缓存在做什么,如何禁用它以及如何清除它?

您的 App Engine 实例前面的服务基础设施可能会通过 this is not an officially documented feature 缓存请求。如果您有很多客户端从同一个网络访问 App Engine,导致所有客户端都访问同一组缓存并使这些缓存保持温暖,则您更有可能看到这种情况。没有 API 刷新缓存,因此 John Hanley 在上面的评论中提供的建议是最好的缓解措施:使用 version-specific 静态文件的 URL,您只想由特定版本提供服务您的应用程序。