Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.6k views
in Technique[技术] by (71.8m points)

http headers - How do disable Transfer-Encoding in Tomcat 6

I have a web application running on Tomcat 6.0.29 server and JDK 1.6.

When I send the response to the client, Tomcat sends

Transfer-Encoding: chunked 

in the headers when the response size is > 8KB. For responses < 8KB, it sends

Content-Length : 

I understand that Chunked encoding is the preferred way to handle bulk responses, however our clients do not want to change their code (as it is distributed all across the servers).

How can I disable Chunked encoding in Tomcat?

I could Disable HTTP/1.1 in Tomcat and enable HTTP/1.0 (not sure how I can do this)

I tried the following with no success:

  1. In Connector tag in server.xml, I set bufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           bufferSize="65536" socketBuffer="65536"
           redirectPort="8443" /&gt;
    
  2. Using NIOConnector in server.xml with following configuration:

    <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" />
    
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The only way I could get it working is by setting the BufferSize on response.

response.setBufferSize() sets the Content-Length header of the response size. Once the response size goes beyond the bufferSize it would fallback to Transfer-Encoding: Chunked. The buffer size should be set to an appropriate value. Setting it to a higher value would buffer all of the response in memory before flushing it. So the value should be set to an optimistic size.

Few of my clients are depending on Content-Length response header. I have to set this for backward compatibility. By default Tomcat buffer size is set to 8K (I think for Weblogic/Websphere this is 32K bytes).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...