Сжатие Tomcat 7 gzip не работает

Я добавил следующие строки в conf/server tomcat.xml-файл для включения сжатия gzip, но его не работает. Страницы по-прежнему uncompressesd.

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

есть идеи?

4 ответов


Если Tomcat противостоит Apache на порту 80, вам нужно будет включить сжатие в самом Apache. Сжатие в Tomcat будет работать только при доступе к нему непосредственно на порту 8080.


В Windows я столкнулся с этим поведением, пытаясь временно включить сжатие контента в моей среде разработки, чтобы получить приблизительное представление об общей полезной нагрузке страницы в моем приложении.

Я могу подтвердить, что Eset Nod32 Antivirus ведет себя так, как @bugs_ описывает в своем ответе на этот вопрос, и я также могу подтвердить, что запуск Fiddler4 имеет тот же эффект. Однако как закрытие Fiddler, так и отключение HTTP-сканирования NOD32 не решили проблема, для этого мне пришлось отключить использование "sendfile" в моем коннекторе следующим образом:

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

важным атрибутом здесь является useSendfile="false"

Я использую Apache Tomcat 8 под Windows. Документация Tomcat (http://tomcat.apache.org/tomcat-8.0-doc/config/http.html) говорит следующее о useSendfile:

используйте этот атрибут, чтобы включить или отключить функцию sendfile. Значение по умолчанию-true. Обратите внимание, что использование sendfile отключит любое сжатие, которое Tomcat может в противном случае выполнить для ответа.

и compression:

существует компромисс между использованием сжатия (сохранение пропускной способности) и использованием функции sendfile (сохранение циклов процессора). Если соединитель поддерживает функцию sendfile, например соединитель NIO, использование sendfile будет иметь приоритет над сжатием. Симптомы будут заключаться в том, что статические файлы больше, чем 48 КБ отправили без сжатия. Можно отключить sendfile, установив атрибут usesendfile соединителя, как описано ниже, или изменить порог использования sendfile в конфигурации DefaultServlet в conf/web по умолчанию.XML или в интернете.xml вашего веб-приложения.


в моем случае это не сработало из-за антивируса (ESET, Windows)

Он был привязан где-то до браузера. Он распаковал тело и удалил заголовок "Content-Encoding". Для браузера ответ выглядел как обычный не сжатый ответ. Даже у скрипача он был уже распакован.

Https-ответы работали, но http-респосы были распакованы ESET.

этого недостаточно. Поверните компании ESET от. Мне пришлось перейти в "дополнительные настройки" - > " веб-доступ защита "- > "HTTP, HTTPS" и выключите его там

Если вы обслуживаете файлы с жесткого диска, вам может понадобиться добавить опцию useSendFile= "false" в соединитель.


Я тестировал подобное server.xml изменения в моей локальной среде разработки и был разочарован тем, что он тоже не работает.

моя проблема заключалась в том, что я вносил изменения в мою локальную установку Tomcat (C:\apache-tomcat-8.0.5), которое я выбрал при использовании Servers window -> (right-click) -> New -> Server диалог в наборе инструментов Spring.

однако при публикации фактический используемый каталог tomcat находился в (рабочее место папка.\)метаданные.\Плагины\орг.затмение.wst.сервер.core\tmp0.

вы можете проверить опубликованное местоположение, щелкнув правой кнопкой мыши сервер и выбрав "обзор местоположения развертывания..."

enter image description here

оттуда вы можете обновить соответствующий , или вы можете удалить и повторно добавить сервер.