处理 .JS 文件的简单请求时,Tomcat 响应挂起
Posted
技术标签:
【中文标题】处理 .JS 文件的简单请求时,Tomcat 响应挂起【英文标题】:Tomcat response hanging when processing simple request for .JS file 【发布时间】:2014-05-02 12:57:56 【问题描述】:我的 Tomcat 7 服务器上有一个 javascript 文件。
但是,当我尝试通过 HTTP GET 检索文件时,响应挂起并且没有将文件完全写入我的客户端。它将大约 80% 的文件写入我的客户端,然后响应似乎挂起。目前我在 tomcat 日志中找不到任何内容。
好像不是浏览器的问题,wget、Chrome、Firefox、IE都挂了。
如果我重命名文件扩展名,以便将其检测为不同的 MIME 类型,它可以工作并下载(例如,重命名为 test.blah)。注意:.txt (plain/text) 也会失败。
我注意到文件中可能编码了一些奇怪的字符:
iconv -f ascii -t ascii jquery.jqplot.js > test
iconv: illegal input sequence at position 321379
我曾尝试使用 iconv 来查找并删除任何奇怪的字符,但无济于事。
iconv f ascii -t ascii//IGNORE jquery.jqplot.js > test #still does not work)
文件在这里:
http://www.tempsend.com/081FEAAA7F/D7C0/jquery.jqplot.js
注意:如果我将 web.xml 中用于“js”扩展的 mime-mapping 从“application/javascript”更改为“application/octet-stream”,它将正常下载。** 更新:
我能够通过将文件直接放入 webapps/ROOT/ 并尝试获取它来重现它。详细信息:RHELS 5.9 -tomcat 7.0.27 和 7.0.52。
还注意到只有在通过 HTTP 远程访问文件时才会发生这种情况(它通过 HTTPS 或通过 localhost 工作)。这让我认为这可能是一些奇怪的 Intranet 防火墙问题。
【问题讨论】:
文件是合法的utf-8符合iconv,linux机器系统默认(tomcat读取静态web资源时使用的)也是utf8 确切的 Tomcat 版本?你启用压缩了吗?如果是这样,设置是什么? 【参考方案1】:这对我来说在干净的 Tomcat 7.0.53 安装上没有任何问题(使用 RC,因为 7.0.53 在我写这篇文章时还没有正式发布)。
我记得在过去几年中与 Tomcat 和 Javascript 相关的唯一问题是用户代理无法识别 mime 类型。
我也用压缩检查过这个,它仍然有效。
因此,这很可能是您的应用程序正在执行的操作。我建议查看过滤器和任何配置为提供 javascript 和/或静态资源的 servlet。
【讨论】:
我能够通过将文件直接放入 webapps/ROOT/ 并尝试在 RHELS 5.9 上获取它来重现它。使用 tomcat 7.0.27 和 7.0.52 测试以上是关于处理 .JS 文件的简单请求时,Tomcat 响应挂起的主要内容,如果未能解决你的问题,请参考以下文章