Сжатие Tomcat не добавляет кодировку контента:gzip в заголовке

StackOverflow https://stackoverflow.com/questions/550024

  •  23-08-2019
  •  | 
  •  

Вопрос

Я использую 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" в шапке?

Это было полезно?

Решение

Посмотри на 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, файл 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>

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

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

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

Начиная с версии 0.0.4, это помогает соблюдать следующие методы повышения производительности.

  1. Минимизируйте HTTP-запросы — можно обслуживать несколько файлов JS/CSS в одном запросе.
  2. Кэширование на стороне клиента — добавляет правильный заголовок Cache-Control, Expires.
  3. Минимизация JS/CSS на лету — с использованием YUICompressor
  4. Сжатие — поддерживает двустороннее сжатие для кодировок gzip/deflate/compress.
  5. Кэширование ответов на сервере — чтобы избежать повторной обработки неизмененных ресурсов.
  6. Добавить кодировку символов — чтобы сообщить браузеру заранее

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

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

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

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

(сжимайте все, что превышает 256 КБ)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top