Ответ 1
Если Tomcat находится под управлением Apache на порту 80, вам необходимо включить сжатие в самом Apache. Сжатие в Tomcat будет работать только при непосредственном доступе к нему на порт 8080.
Я добавил следующие строки в файл 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"/>
Любая идея?
Если 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 отключит любое сжатие, которое Tomcat может выполнить в ответ.
И это о compression
:
Существует компромисс между использованием сжатия (сохранение полосы пропускания) и использованием функции sendfile (сохранение циклов процессора). Если соединитель поддерживает функцию sendfile, например. NIO-разъем, используя sendfile, будет иметь приоритет перед сжатием. Симптомы будут заключаться в том, что статические файлы, превышающие 48 КБ, будут отправлены несжатыми. Вы можете отключить sendfile, установив атрибут useSendfile соединителя, как описано ниже, или измените порог использования sendfile в конфигурации DefaultServlet в файле conf/web.xml по умолчанию или в web.xml вашего веб-приложения.
Я тестировал аналогичные изменения 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.
Вы можете проверить опубликованное местоположение, щелкнув правой кнопкой мыши на сервере и выбрав "Обзор местоположения развертывания..."
Оттуда вы можете обновить соответствующий файл server.xml
, или вы можете удалить и повторно добавить сервер.
В моем случае это не сработало из-за Antivirus (ESET, Windows)
Он был привязан где-то до браузера. Он распаковал тело и удалил заголовок Content-Encoding. Для ответа браузера выглядел как обычный не сжатый ответ. Даже в Fiddler он уже распался.
Ответы Https работали, но http-репозитории были декомпрессированы ESET.
Этого недостаточно. Выключите ESET. Мне пришлось перейти к "расширенным настройкам" → "Защита веб-доступа" → "HTTP, HTTPS" и отключить его там
Если вы обслуживаете файлы с жесткого диска, вам может понадобиться добавить параметр useSendFile = "false" в соединитель.