处理 .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 响应挂起的主要内容,如果未能解决你的问题,请参考以下文章

Nginx+Tomcat 实现动态分离,负载均衡

013.Nginx动静分离

Nginx系列之4:动静分离

Nginx系列之4:动静分离

Tomcat安装配置启动IDE集成

Tomcat:响应 http POST 请求的 Websocket 广播