Подтвердить что ты не робот

Как отключить Transfer-Encoding в Tomcat 6

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

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

Transfer-Encoding: chunked 

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

Content-Length : 

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

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

Я могу отключить HTTP/1.1 в Tomcat и включить HTTP/1.0 (не знаю, как это сделать)

Я пробовал следующее без успеха:

  • В теге Connector в server.xml я установил bufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           bufferSize="65536" socketBuffer="65536"
           redirectPort="8443" /&gt;
    
  • Использование 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" />
    
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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