2011-06-09 27 views
12

Tengo una aplicación web ejecutándose en el servidor Tomcat 6.0.29 y JDK 1.6.Cómo deshabilitar la codificación de transferencia en Tomcat 6

Cuando envío de la respuesta al cliente, envía Tomcat

Transfer-Encoding: chunked 

en las cabeceras cuando el tamaño de la respuesta es> 8 KB. Para las respuestas < 8KB, envía

Content-Length : 

entiendo que Chunked encoding es la manera preferida para manejar las respuestas a granel, sin embargo nuestros clientes no quieren cambiar su código (ya que se distribuye en todo los servidores).

¿Cómo puedo desactivar la codificación fragmentada en Tomcat?

que pudiera deshabilitar HTTP/1.1 en Tomcat y habilitar HTTP/1.0 (no sé cómo puedo hacer esto)

He intentado lo siguiente sin éxito:

  1. En la etiqueta del conector en server.xml , puse bufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1" 
         connectionTimeout="20000" 
         bufferSize="65536" socketBuffer="65536" 
         redirectPort="8443" /&gt; 
    
  2. Usando NIOConnector en server.xml con configuración siguiente:

    <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" /> 
    

Respuesta

3

Por lo que yo sé, para desactivar la salida fragmentada en Tomcat debe proporcionar una cabecera de longitud de contenido en el servlet.

+1

No quiero establecer el encabezado Content-Length mediante programación. Esperaba que "bufferSize" o "socketBuffer" hicieran la magia. Ninguno de ellos funciona. – Rajendra

+0

Estoy bastante seguro de que es la única forma de hacerlo funcionar con Tomcat. –

8

La única forma en que podría hacerlo funcionar es configurando el BufferSize en la respuesta.

response.setBufferSize() establece el encabezado Content-Length del tamaño de respuesta. Una vez que el tamaño de la respuesta va más allá de bufferSize, retrocederá a Transfer-Encoding: Chunked. El tamaño del búfer debe establecerse en un valor apropiado. Establecerlo en un valor más alto almacenaría toda la respuesta en la memoria antes de enjuagarlo. Por lo tanto, el valor debe establecerse en un tamaño optimista.

Algunos de mis clientes dependen del encabezado de respuesta Content-Length. Tengo que configurar esto para la compatibilidad con versiones anteriores. Por defecto, el tamaño del búfer de Tomcat está establecido en 8K (creo que para Weblogic/Websphere esto es 32K bytes).

0

Agregar un encabezado [Connection: close] a la respuesta evita que Tomcat agregue el encabezado [Transfer-Encoding: chunked].

Cuestiones relacionadas