我在我的appengine-web.xml中使用以下内容启用了应用程序引擎中静态图像文件的缓存
<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提供的:

现在,如果我简单地注释掉我前面提到的appengine-web.xml中的静态文件部分,一切都很好:.js文件与它们自己的内容一起服务,我没有问题:

这对我来说很奇怪。.js文件甚至不在静态文件部分中指定的目录中。我的appengine-web.xml中是否出现了语法错误,从而导致了一些常见的错误?
幸运的是,我能够在部署的应用程序和本地dev服务器上轻松可靠地再现这一点,只需简单地注释掉appengine-web.xml.中的appengine-web.xml.部分。在Chrome和IE中都会发生这种情况。我在使用Java应用程序引擎。
发布于 2013-02-01 17:00:56
我设法弄清楚发生了什么事:
我在我的web.xml中有一个过滤器,它的目的是在用户请求页面但没有登录的情况下返回一个特殊的HTML页面。但是,我发现这个过滤器也适用于浏览器也会为 .js 文件生成的请求,所以我的过滤器将返回.js文件而不是.js文件。
奇怪的是,当从appengine-web.xml.中删除该部分时,我没有问题如果没有该部分,AppEngine将恢复默认行为,根据文档,默认行为是将所有文件视为静态文件,在这种情况下,我预计问题总是会发生的。另外,有时一个.js会返回,有时一个HTML会返回--它似乎是某个地方的竞争条件。对我来说还是个谜。
无论如何,我现在确保过滤器只应用于对站点的HTML页面的请求,这解决了问题。谢谢你的评论。
https://stackoverflow.com/questions/14647068
复制相似问题