2011-06-09 78 views
12

我有一個運行在Tomcat 6.0.29服務器和JDK 1.6上的Web應用程序。如何在Tomcat中禁用Transfer-Encoding 6

當我發送到客戶端的響應時,發送的Tomcat

Transfer-Encoding: chunked 
在頭

當響應大小是> 8KB。對於響應< 8KB,發送

Content-Length : 

我明白Chunked encoding是處理散裝反應的首選方式,但我們的客戶不希望改變自己的代碼(因爲它是所有跨服務器分佈)。

如何禁用Tomcat中的塊化編碼?

我可以在Tomcat中禁用HTTP/1.1,並啓用HTTP/1.0(不知道我怎麼能做到這一點)

我嘗試沒有成功如下:

  1. 在連接器標籤中server.xml我設置bufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1" 
         connectionTimeout="20000" 
         bufferSize="65536" socketBuffer="65536" 
         redirectPort="8443" /&gt; 
    
  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" /> 
    

回答

3

據我所知,禁用分塊輸出在Tomcat中,您必須在servlet提供內容長度標題。

+1

我不想以編程方式設置Content-Length標頭。我期待「bufferSize」或「socketBuffer」做魔術。他們都沒有工作。 – Rajendra 2011-10-26 16:32:04

+0

我相當確信它是使它與tomcat一起工作的唯一方法。 – 2011-10-26 21:03:40

8

我能得到它的唯一方法是通過設置BufferSize的響應。

response.setBufferSize()設置響應大小的標頭Content-Length。一旦響應大小超出bufferSize,它將回退到Transfer-Encoding: Chunked。 緩衝區大小應設置爲適當的值。將其設置爲更高的值會在刷新之前緩衝內存中的所有響應。所以這個值應該設置爲樂觀的大小。

我的客戶很少取決於Content-Length響應標題。我必須將其設置爲向後兼容。默認情況下Tomcat緩衝區大小設置爲8K(我認爲對於Weblogic/Websphere來說這是32K字節)。

0

將[Connection:close]頭添加到響應中可防止Tomcat添加[Transfer-Encoding:chunked]標頭。