如何在Tomcat 6中禁用Transfer-Encoding

Raj*_*dra 12 tomcat6 chunked-encoding http-headers

我有一个在Tomcat 6.0.29服务器和JDK 1.6上运行的Web应用程序.

当我将响应发送到客户端时,Tomcat发送

Transfer-Encoding: chunked 
Run Code Online (Sandbox Code Playgroud)

响应大小> 8KB时在标头中.对于<8KB的回复,它会发送

Content-Length : 
Run Code Online (Sandbox Code Playgroud)

我知道Chunked编码是处理批量响应的首选方式,但是我们的客户不希望更改其代码(因为它分布在整个服务器上).

如何在Tomcat中禁用Chunked编码?

我可以在Tomcat中禁用HTTP/1.1并启用HTTP/1.0(不知道我该怎么做)

我尝试了以下但没有成功:

  1. 在Connector标签中server.xml,我设置了bufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           bufferSize="65536" socketBuffer="65536"
           redirectPort="8443" /&gt;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在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" />
    
    Run Code Online (Sandbox Code Playgroud)

Raj*_*dra 8

我能让它工作的唯一方法是在响应时设置BufferSize.

response.setBufferSize()设置Content-Length响应大小的标头.一旦响应大小超出bufferSize,它就会回退到Transfer-Encoding: Chunked.缓冲区大小应设置为适当的值.将其设置为更高的值将在刷新之前缓冲内存中的所有响应.因此,该值应设置为乐观的大小.

我的客户很少依赖于Content-Length响应头.为了向后兼容,我必须设置它.默认情况下,Tomcat缓冲区大小设置为8K(我认为对于Weblogic/Websphere,这是32K字节).


Pau*_*ire 3

据我所知,要在 Tomcat 中禁用分块输出,您必须在 servlet 中提供内容长度标头。