最近公司的项目中,在一个功能模块的查询中本地查询没有问题,但是部署到测试服务器上面访问的时候使用Chrome访问就会提示“net::ERR_INCOMPLETE_CHUNKED_ENCODING”,用Chrome自带的工具看了下原来这个在调用ajax查询的时候构造的URL长度太长了,编译完成之后起码有7k+个字母。
由于本地测试没有问题,所以问题应该是出自测试服务器上面的配置问题。测试服务器采用的是nginx+tomcat的配置。
1、先查看nginx的error.log文件,发现提示“2262783 readv() failed (104: Connection reset by peer)”的错误提示,Google一番原来说是请求超时导致的。
2、再查看Tomcat的运行日志,在调用那个查询的时候Tomcat上面有错误的提示“Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.”这里主要是Tomcat的header的缓存区大小不够。
好了通过以上两个的错误日志,基本可以锁定是在Tomcat上面的配置问题了。
解决方法:
在Tomcat的conf中把server.xml中增加maxHttpHeaderSize的字段或者是把maxHttpHeaderSize的数值调大就好。
例如:
<Connector URIEncoding="UTF-8" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
useBodyEncodingForURI="false"
enableLookups="false"
connectionTimeout="20000"
redirectPort="8443" maxHttpHeaderSize="你想要的大小"/>
tomcat常用配置注释:
maxHttpHeaderSize="8192" http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding="UTF-8" 指定Tomcat容器的URL编码格式。
disableUploadTimeout="true" 上传时是否使用超时机制
enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为false
compression="on" 打开压缩功能
compressionMinSize="10240" 启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩
tomcat配置示例:
配置示例
<Connector port="8080"
redirectPort="8443"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
connectionTimeout="20000"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
URIEncoding="UTF-8"
disableUploadTimeout="true"
enableLookups="false"
compression="on"
compressionMinSize="10240"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain">
...
</Connector>
PS:
一开始Chrome,我就一股脑的根据Chrome提示的错误去查找资料去调试,其实这个现在想起来是不要得的,因为应该先把相关的容器的错误日志都查看一遍,看看问题出在哪里然后再去对症下药这样子才能事半功倍。谨记谨记
参考资料:http://zhaopeiyan.blog.51cto.com/10522430/1788319