我有一个在Tomcat 6.0.29服务器和JDK 1.6上运行的web应用程序。
当我向客户端发送响应时,Tomcat会发送
Transfer-Encoding: chunked
当响应大小>8KB时,在标头中。对于响应<8KB,发送
Content-Length :
我知道分块编码是处理批量响应的首选方式,但我们的客户不想更改他们的代码(因为它分布在所有服务器上)。
如何在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" />
我能让它工作的唯一方法是在响应时设置BufferSize。
CCD_ 3设置响应大小的CCD_。一旦响应大小超过bufferSize,它将回退到Transfer-Encoding: Chunked
。缓冲区大小应设置为适当的值。将其设置为更高的值将在刷新之前缓冲内存中的所有响应。因此,应将该值设置为乐观大小。
我的客户很少依赖Content-Length
响应标头。为了向后兼容,我必须设置此项。默认情况下,Tomcat缓冲区大小设置为8K(我认为对于Weblogic/Websphere,这是32K字节)。
据我所知,要在Tomcat中禁用分块输出,您必须在servlet中提供一个内容长度标头。
在响应中添加[Connection:close]标头会阻止Tomcat添加[Transfer-Encoding:cchunked]标头。