Компрессия Tomcat не добавляет кодировку контента: gzip в заголовке
Я использую Tomcat для сжатия моего содержимого HTML следующим образом:
<Connector port="8080" maxHttpHeaderSize="8192"
maxProcessors="150" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="150" connectionTimeout="20000" disableUploadTimeout="true"
compression="on" compressionMinSize="128" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html"
URIEncoding="UTF-8" />
В заголовке HTTP (как это наблюдается через YSlow), однако, я не вижу
Content-Encoding: gzip
что привело к плохой оценке YSlow.
Все, что я вижу, это
HeadersPost
Response Headers
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 5251
Date: Sat, 14 Feb 2009 23:33:51 GMT
Я запускаю конфигурацию Tomcat apache mod_jk.
Как мне сжать содержимое HTML с помощью Tomcat, а также добавить в заголовок "Content-Encoding: gzip"?
Ответы
Ответ 1
Посмотрите http://sourceforge.net/projects/pjl-comp-filter/.
Другие пользовательские решения могут иметь утечки памяти.
Кроме того, если вы используете mod_jk, то вы, конечно же, не используете разъем 8080 (который поддерживает сжатие) для этих запросов.
Ответ 2
Tomcat будет выполнять сжатие. Однако, поскольку вы используете mod_jk
, я предполагаю, что вы получаете запросы через Apache на порт 80, а не tomcat на порт 8080
. В качестве эксперимента попробуйте получить свою страницу через порт 8080, а затем, проверив yslow
, вы должны увидеть правильные заголовки.
Я думаю, что происходит то, что apache распаковывает содержимое, которое он получает от tomcat через mod_jk
, а затем передаёт дефлированный контент в браузер.
Если вы хотите использовать mod_jk
, вам нужно будет настроить сжатие на Apache, а не Tomcat.
Ответ 3
Возможно, сжатие Tomcat имеет в виду не gzip? Это удар в темноте, но это может относиться к сжатию белого пространства или обрезке линии.
Я бы предположил, что Tomcat будет немного более явным в этом отношении (здесь надеется).
У нас есть фильтр gzip, упомянутый duffmo, запущенным в нашем приложении, web.xml выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd">
<display-name>App-Web</display-name>
<!-- FILTERS -->
<!-- Gzip filter -->
<filter>
<filter-name>GZIPFilter</filter-name>
<filter-class>weblogicx.servlet.gzip.filter.GZIPFilter</filter-class>
</filter>
[snip]
</web-app>
Ответ 4
Я посмотрел документацию Tomcat:
http://tomcat.apache.org/tomcat-5.5-doc/config/http.html
В нем упоминается использование compression="force"
, который работал у меня. Он также говорит, что вы можете установить minimum number
. Это работало отлично для меня
<Connector port="8080" compression="256000" />
(сжимайте что-нибудь более 256 КБ)
Значение по умолчанию для compressableMimeType
означает, что мне не нужен этот атрибут.
Также обратите внимание, что он не перечисляет атрибут CompressionMinSize
.
Ответ 5
Чтобы улучшить общую клиентскую производительность J2EE-веб-приложения, вы можете попробовать Java-библиотеку WebUtilities.
Вот ссылка: http://code.google.com/p/webutilities/.
Он предоставляет компоненты фильтра, тега, сервлета для применения различных практик производительности на стороне клиента, что приводит к повышению производительности по сравнению с PageSpeed /YSlow.
Начиная с версии 0.0.4, это помогает в следующих практиках производительности.
- Минимизировать HTTP-запросы - может обслуживать несколько файлов JS/CSS по одному запросу
- Кэширование на стороне клиента - добавляет правильный заголовок Cache-Control, Expires
- На лету JS/CSS minification - с помощью YUICompressor
- Сжатие - поддерживает сжатие 2way для кодирования gzip/deflate/compress
- Кэширование ответов на сервере - во избежание повторной обработки неизменных ресурсов
- Добавить кодировку символов - чтобы браузер знал заранее
Он также очень настраивается/настраивается на MIME, URL или User-Agents.