Play Framework 似乎正在缓存 GET 结果

Play Framework seems to be caching GET results

我正在使用 Play Framework 2.3.8(在 2.2.4 上有同样的问题,升级没有帮助)。

我没有使用 Play Framework 的缓存 API。但似乎 GET 结果仍然以某种奇怪的方式被 Play 缓存。

例如,如果我点击 api GET /api/GetPurchases,我将得到 2 个结果。 Play 将记录 GetPurchases api 已被击中(我还覆盖了 Global.java 中的 OnRouteRequest 并将其记录在那里)。然后我会点击 api POST /api/CreatePurchase 并确认数据库中现在有 3 个购买对象。

我将再次调用 GET /api/GetPurchases,我会得到 2 个结果。并且日志显示 api /api/GetPurchases 似乎从未被击中。

此外,这仅在我的应用程序部署到 Heroku 时发生。在本地,一切都完美无缺。但我已经与 Heroku 支持人员进行了交谈,以确保 Heroku 仅适用于平台,并且他们绝不会导致 Play 的行为有任何不同。

我们最终发现 Play Framework 正在缓存 GET 结果。

我们发现默认情况下,Play 不会在开发模式下缓存结果(因此在本地部署时)。但在生产模式下(因此当部署到 Heroku 时),Play 默认会缓存结果。

为了改变这一点,我们在不希望 Play 缓存结果的操作方法中添加了这行代码:

response().setHeader(CACHE_CONTROL, "no-cache");

通过 运行 foreman start 在本地模拟生产部署也很有帮助。

感谢 Salem 和 millhouse 的上述评论