在 Google App Engine 灵活时,什么会使用 s-maxage 缓存响应以及如何清除该缓存?



>我有一个应用程序在 App Engine Flexible 上的自定义 Java 容器中运行。我一直在试图追踪为什么我会收到过时的响应,并将问题缩小到被缓存的响应。

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

当我在 https://[app-id].appspot.com/api/123 访问应用的 API 时,我的应用返回一个Cache-Control: public, s-maxage=31536000, max-age=3600响应标头。s-maxage的目的是告诉Cloudflare(我们的CDN(缓存响应,我们在更新内容时手动清除Cloudflare的缓存。但是,似乎我们应用程序前面的某些内容正在缓存响应。在缓存的响应中,日期响应标头保持不变,并且期限增加,表明内容确实过时。

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

如果我尝试通过 SSH 到计算引擎实例或 App Engine 灵活实例中从 GCP 中重现此问题,则不会观察到任何缓存。但是,我已经从其他云和笔记本电脑上尝试过,并且缓存是一致的。Cloudflare支持人员最初提醒我们注意这种行为,他们看到了来自生产数据中心的缓存,这些数据中心通过CDN互连计划直接与Google对等。

这必须来自Google的基础架构本身,任何可能来自App Engine的隐藏Google Cloud Load Balancer,因为连接是加密的。

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

App Engine 实例前面的服务基础架构可能会缓存请求,尽管这不是官方记录的功能。如果您有很多客户端从同一网络访问 App Engine,导致所有客户端都访问同一组缓存并保持这些缓存处于温暖状态,则更有可能看到这种情况。没有用于刷新缓存的 API,因此 John Hanley 在上面的评论中提供的建议是最好的缓解措施:对静态文件使用特定于版本的 URL,您只想由特定版本的应用提供服务。

最新更新