运行 Java 11 的 Google 云应用引擎标准未按预期处理 HTTP if-modified-since 标头

问题描述 投票:0回答:1

我们的许多网络应用程序的 URL 不断返回没有正文的 304。

在 Chrome 上测试我可以在所有请求中看到以下标头:

'if-modified-since: Tue, 01 Jan 1980 00:00:01 GMT'

应用程序引擎始终返回 304,即使对于新部署的应用程序也是如此。

我希望它能重播 200 次并包含正文内容。这些不是静态 URL,因此应该调用我们的后端代码来生成内容。

我尝试添加一个 Servlet 过滤器,将 Last-Modified 标头设置为更新的内容,但这似乎没有效果。

谁能告诉我如何影响应用程序引擎正确返回内容?

google-app-engine
1个回答
0
投票

对于发现此问题的其他人来说,问题是由于 appengine 的缓存机制造成的。

构建应用程序时,webpack 将所有文件时间戳设置为零。当它部署在应用程序引擎上时,所有资源文件(即没有运行代码的文件)都将发送到 Google 的 CDN。对资源的所有请求均由 CDN 提供 - 并且由于所有时间戳均为零,因此它无法判断何时添加了新版本,并返回旧文件。

Google 工程师建议添加一个标志,将所有文件的时间戳设置为应用程序的部署时间,但这并没有发生。

一个快速修复方法是为资源配置 Servlet 路径(即必须运行您的代码),然后从“本地文件系统”加载并返回文件。不要使用 ServletDispatcher 返回资源,因为这将提供缓存版本。

© www.soinside.com 2019 - 2024. All rights reserved.