Сжатие 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

я запускаю конфигурацию Apache mod_jk Tomcat.

как сжать содержимое HTML с помощью Tomcat, а также добавить "Content-Encoding: gzip" в заголовок?

5 ответов


взгляните на http://sourceforge.net/projects/pjl-comp-filter/.

другие пользовательские решения могут иметь утечек памяти.

кроме того, если вы используете mod_jk, то вы, конечно, не используете разъем 8080 (который поддерживает сжатие) для этих запросов.


Tomcat будет выполнять сжатие. Однако, потому что вы используете mod_jk Я думаю, вы получаете запросы через Apache на порт 80, а не tomcat на порт 8080. В качестве эксперимента попробуйте получить страницу через порт 8080, а затем проверки yslow вы должны увидеть правильные заголовки.

Я думаю, что происходит то, что apache распаковывает содержимое, которое он получает от tomcat через mod_jk и затем передавая сдутого содержимое браузер.

если вы хотите использовать mod_jk тогда вам нужно будет настроить сжатие на Apache, а не Tomcat.


возможно, сжатие Tomcat имеет в виду не gzip? Это удар в темноте, но он может относиться к сжатию белого пространства или обрезке линии.

Я бы предположил, что Tomcat будет немного более явным в этом отношении (вот Надежда).

у нас есть фильтр gzip, упомянутый duffmo работает в нашем приложении, в интернете.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>

чтобы улучшить общую производительность на стороне клиента веб-приложения J2EE, вы можете попробовать библиотеку webutilities java.

вот ссылка ::http://code.google.com/p/webutilities/.

Он предоставляет компоненты фильтра, тега, сервлета для применения различных методов производительности на стороне клиента, что приводит к повышению производительности по сравнению с PageSpeed/YSlow.

начиная с версии 0.0.4 это помогает со следующей производительностью практика.

  1. минимизировать HTTP-запросы-может обслуживать несколько файлов JS / CSS в одном запросе
  2. кэширование на стороне клиента-добавляет правильный контроль кэша, истекает заголовок
  3. на лету JS/CSS minification-использование YUICompressor
  4. сжатие-поддержка сжатия 2way для кодировок gzip/deflate / compress
  5. кэширование ответов на сервере-во избежание переработки неизмененных ресурсов
  6. добавить кодировку символов-to сообщите браузеру заранее

Он также легко настраивается / настраивается против MIME, URL или пользовательских агентов.


Я посмотрел документацию Tomcat здесь: http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

в нем упоминается использование compression="force" что сработало для меня. Он также говорит, что вы можете установить minimum number. Это сработало отлично для меня

<Connector port="8080" compression="256000" />

(сжать что-нибудь более 256Kb)

значение по умолчанию compressableMimeType означает, что мне не нужен этот атрибут. Также обратите внимание, что он не перечисляет .