La compresión Tomcat 7 GZIP no funciona
compression server.xml (4)
He agregado las siguientes líneas en el archivo conf / server.xml de tomcat para habilitar la compresión gzip pero no funciona. Las páginas aún están sin comprimir.
<Connector port="8080"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/plain,text/css,
text/javascript,text/json,application/x-javascript,
application/javascript,application/json"/>
¿Alguna idea?
En Windows, encontré este comportamiento al intentar habilitar temporalmente la compresión de contenido en mi entorno de desarrollo para obtener una comprensión aproximada de la carga total de una página en mi aplicación.
Puedo confirmar que ESET NOD32 Antivirus se comporta de la manera que @bugs_ describe en su respuesta a esta pregunta y también puedo confirmar que ejecutar Fiddler4 tiene el mismo efecto. Sin embargo, tanto cerrar Fiddler como deshabilitar el escaneo HTTP de NOD32 no resolvió el problema, para hacerlo, tuve que desactivar el uso de ''sendfile'' en mi conector de la siguiente manera:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
compression="on" compressionMinSize="8192" useSendfile="false"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
redirectPort="8443" />
El atributo importante, aquí, es useSendfile="false"
Estoy usando Apache Tomcat 8, bajo Windows. La documentación de Tomcat ( http://tomcat.apache.org/tomcat-8.0-doc/config/http.html ) dice lo siguiente sobre useSendfile
:
Use este atributo para habilitar o deshabilitar la capacidad de envío de archivos. El valor por defecto es verdadero. Tenga en cuenta que el uso de sendfile desactivará cualquier compresión que Tomcat haya realizado en la respuesta.
Y esto sobre la compression
:
Existe una compensación entre el uso de compresión (ahorrando ancho de banda) y el uso de la función sendfile (guardando los ciclos de su CPU). Si el conector es compatible con la función sendfile, por ejemplo, el conector NIO, el uso de sendfile tendrá prioridad sobre la compresión. Los síntomas serán que los archivos estáticos de más de 48 Kb se enviarán sin comprimir. Puede desactivar sendfile estableciendo el atributo useSendfile del conector, como se documenta a continuación, o cambiar el umbral de uso de sendfile en la configuración de DefaultServlet en el conf / web.xml predeterminado o en el web.xml de su aplicación web.
En mi caso, no funcionó debido a Antivirus (ESET, Windows)
Estaba encuadernado en algún lugar antes del navegador. Desempaquetó el cuerpo y eliminó el encabezado "Content-Encoding". Para la respuesta del navegador parecía una respuesta normal no comprimida. Incluso en Fiddler ya estaba descomprimido.
Las respuestas de Https estaban funcionando, pero ESET ha descomprimido las respuestas de http.
No es suficiente. Desactiva ESET. Tuve que ir a "configuración avanzada" -> "Protección de acceso web" -> "HTTP, HTTPS" y desactivarlo allí
Si sirve archivos desde el disco duro, es posible que necesite agregar la opción useSendFile = "false" en el conector.
Estaba probando cambios server.xml
similares en mi entorno de desarrollo local y me server.xml
frustrado porque tampoco funcionaba.
Mi problema era que estaba editando mi instalación local de Tomcat ( C: / apache-tomcat-8.0.5 ) que seleccioné al usar la Servers window -> (right-click) -> New -> Server
diálogo Servers window -> (right-click) -> New -> Server
en Spring Tool Suite.
Sin embargo, cuando se publicó, el directorio de tomcat real que se utilizaba se encontraba en (carpeta de espacio de trabajo) /. Metadata / .plugins / org.eclipse.wst.server.core / tmp0 .
Puede verificar la ubicación publicada haciendo clic derecho en el servidor y seleccionando "Examinar ubicación de implementación ..."
Desde allí, puede actualizar el archivo server.xml
apropiado, o puede eliminar y volver a agregar el servidor.
Si Tomcat está liderado por Apache en el puerto 80, deberá habilitar la compresión en Apache. La compresión en Tomcat solo funcionará si accede directamente al puerto 8080.