Как отключить Transfer-Encoding в Tomcat 6 - PullRequest
12 голосов
/ 10 июня 2011

У меня есть веб-приложение, работающее на сервере Tomcat 6.0.29 и JDK 1.6.

Когда я отправляю ответ клиенту, Tomcat отправляет

Transfer-Encoding: chunked 

в заголовках, когда размер ответа> 8 КБ. Для ответов <8 КБ, отправляет </p>

Content-Length : 

Я понимаю, что Chunked Encoding является предпочтительным способом обработки массовых ответов, однако наши клиенты не хотят менять свой код (так как он распространяется по всем серверам).

Как отключить кодирование Chunked в Tomcat?

Я мог бы отключить HTTP / 1.1 в Tomcat и включить 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;
    
  2. Использование NIOConnector в server.xml со следующей конфигурацией:

    <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 ]

8 голосов
/ 26 октября 2011

Единственный способ заставить его работать, это установить BufferSize для ответа.

response.setBufferSize() устанавливает заголовок Content-Length размера ответа. Как только размер ответа выходит за пределы bufferSize, он возвращается к Transfer-Encoding: Chunked. Размер буфера должен быть установлен в соответствующее значение. Установка более высокого значения буферизует все ответы в памяти перед сбросом. Таким образом, значение должно быть установлено на оптимистический размер.

Немногие из моих клиентов зависят от Content-Length заголовка ответа. Я должен установить это для обратной совместимости. По умолчанию размер буфера Tomcat установлен на 8 КБ (я думаю, что для Weblogic / Websphere это 32 КБ).

3 голосов
/ 25 октября 2011

Насколько я знаю, чтобы отключить chunked output в Tomcat, вы должны указать заголовок длины содержимого в вашем сервлете.

0 голосов
/ 01 марта 2015

Добавление заголовка [Connection: close] к ответу не позволяет Tomcat добавить заголовок [Transfer-Encoding: chunked].

...