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

Сжатие без сжатия Tomcat 7 GZIP

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

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

Любая идея?

4b9b3361

Ответ 1

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

Ответ 2

В 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 отключит любое сжатие, которое Tomcat может выполнить в ответ.

И это о compression:

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

Ответ 3

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

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

Однако при публикации фактический каталог tomcat был расположен в папке рабочей области \. metadata \.plugins\org.eclipse.wst.server.core\tmp0.

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

enter image description here

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

Ответ 4

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

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

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

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

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