【问题标题】:Javascript files are served up as HTML files when using static-files declaration in appengine-web.xml在 appengine-web.xml 中使用静态文件声明时,Javascript 文件作为 HTML 文件提供
【发布时间】:2013-02-01 13:11:49
【问题描述】:

我在我的 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:

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

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

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

【问题讨论】:

  • 您是否尝试将 .js 文件的 元素添加到您的 标记条目中?
  • 另一个想法:将条目添加到您的 web.xml jsapplication/javascript

标签: java google-app-engine jsp


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2018-11-12
    • 2011-05-02
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多