我有一个在Tomcat 6.0.29服务器和JDK 1.6上运行的Web应用程序。
当我将响应发送到客户端时,Tomcat发送
Transfer-Encoding: chunked
当响应大小为>时,在标题中8KB。对于回复< 8KB,发送
Content-Length :
我知道Chunked encoding是处理批量响应的首选方式,但我们的客户不希望更改其代码(因为它分布在整个服务器上)。
如何在Tomcat中禁用Chunked编码?
我可以在Tomcat中禁用HTTP / 1.1并启用HTTP / 1.0(不知道我该怎么做)
我尝试了以下但没有成功:
在server.xml
的连接器代码中,我设置了bufferSize =" 65536"
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
bufferSize="65536" socketBuffer="65536"
redirectPort="8443" />
在server.xml中使用NIOConnector并进行以下配置:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
socket.directBuffer="false"
socket.rxBufSize="25188"
socket.txBufSize="43800"
socket.appReadBufSize="32768"
socket.appWriteBufSize="32768"
socket.bufferPool="500"
socket.bufferPoolSize="100000000"
socket.processorCache="500"
socket.keyCache="500"
socket.eventCache="500"
socket.tcpNoDelay="false"
socket.soKeepAlive="true"
socket.soTimeout="5000"
redirectPort="8443" />
答案 0 :(得分:8)
我能让它工作的唯一方法是在响应时设置BufferSize。
response.setBufferSize()
设置响应大小的Content-Length
标头。一旦响应大小超出bufferSize,它就会回退到Transfer-Encoding: Chunked
。
缓冲区大小应设置为适当的值。将其设置为更高的值将在刷新之前缓冲内存中的所有响应。因此,该值应设置为乐观的大小。
我的客户很少依赖Content-Length
响应标头。为了向后兼容,我必须设置它。默认情况下,Tomcat缓冲区大小设置为8K(我认为对于Weblogic / Websphere,这是32K字节)。
答案 1 :(得分:3)
据我所知,要在Tomcat中禁用分块输出,必须在servlet中提供内容长度标题。
答案 2 :(得分:0)
在响应中添加[Connection:close]标头可防止Tomcat添加[Transfer-Encoding:chunked]标头。