1

我在appengine-web.xml中使用以下内容在 appengine 中启用了静态图像文件的缓存:

<static-files>
<include path="/css/images/**.gif" expiration="1d" />
    <include path="/css/images/**.png" expiration="1d" />
    <include path="/css/images/wind_pointers/*.png" expiration="7d" />
    <include path="/css/images/**.jpg" expiration="1d" />
    <include path="/errors/*" />
</static-files>

这工作得很好,直到我发现一个奇怪的副作用:有时,appengine 提供了一个包含我的 HTML 页面内容的 JavaScript 文件,所以结果是我收到大量 JavaScript 错误,因为 JavaScript 解释器被输入的是 HTML 而不是 JS :

由 HTML 内容提供的 .js 文件引起的 JavaScript 错误

现在,如果我简单地注释掉我上面提到的appengine-web.xml中的静态文件部分,一切正常:.js 文件提供了它们自己的内容,我没有问题:

Javascript 文件正确提供。

这对我来说似乎很奇怪。.js 文件甚至不在该静态文件部分中指定的目录中。我的appengine-web.xml中是否有语法错误导致一些奇怪的错误出现?

幸运的是,通过简单地注释掉appengine-web.xml中的静态文件部分,我能够在部署的应用程序和我的本地开发服务器上轻松可靠地重现这一点。它发生在 Chrome 和 IE 中。我正在使用 Java 应用引擎。

4

1 回答 1

1

我设法弄清楚发生了什么:

我的web.xml中有一个过滤器,其目的是在用户请求页面但未登录时返回一个特殊的 HTML 页面。但是,我发现此过滤器将自身应用于浏览器的请求也会生成.js文件,因此我的过滤器将返回 HTML 文件而不是 .js 文件。

奇怪的是,当我没有问题时部分已从appengine-web.xml中删除。如果没有该部分,AppEngine 将恢复为默认行为,根据文档将所有文件视为静态文件,在这种情况下,我希望问题总是会发生。此外,有时.js会返回,有时 HTML 会返回 - 这似乎是某处的竞争条件。这对我来说仍然是个谜。

无论如何,我现在确保过滤器仅应用于站点 HTML 页面的请求,这解决了问题。谢谢你们的评论。

于 2013-02-01T17:00:56.950 回答