Tomcat 8.5.29 HTTP / 2 не поддерживает сжатие GZIP - PullRequest
0 голосов
/ 20 мая 2018

Я использую Tomcat 8.5.29 и, используя соответствующую конфигурацию, я включил поддержку HTTP2 для сайта.Ниже приведена конфигурация в файле server.xml.

<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
           maxThreads="150" SSLEnabled="true" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" compression="on" compressionMinSize="1024"
           >
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
    <SSLHostConfig>
        <Certificate certificateKeyFile="conf/localhost-key.pem"
                     certificateFile="conf/localhost-cert.pem"
                     certificateChainFile="conf/cacert.pem"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

Когда я пытался сравнить время загрузки страницы для сайта, который поддерживает HTTPS 1.1 и HTTP2, он не согласован.Иногда для загрузки требуется больше времени, а иногда - для сравнения с HTTPS 1.1.

Для измерения времени загрузки страницы я использую инструменты разработчика из браузера Chrome.

ПозжеЯ обнаружил, что время загрузки для HTTP / 2 выше, потому что «кодировка содержимого» в ответе не gzip.При использовании HTTP / 1.1 размер файла сценария составляет 4 МБ (gzip), где, как и в HTTP / 2, тот же файл имеет 8 МБ (без кодирования содержимого).Сжатия не происходит.Мы также пробовали использовать useSendfile и сжатие в качестве «силы», но это не сработало.

Мы также пробовали использовать Tomcat версии 8.5.31, но не повезло !!Возникла та же проблема.

Мы использовали Tomcat версии 9 и, используя следующую конфигурацию, получили содержимое в gzip (сжатый).Теперь размер файла уменьшился на 2 МБ при быстрой загрузке страницы.

<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
           maxThreads="150" SSLEnabled="true" 
           >
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" compression="on" compressionMinSize="1024" />
    <SSLHostConfig>
        <Certificate certificateKeyFile="conf/localhost-key.pem"
                     certificateFile="conf/localhost-cert.pem"
                     certificateChainFile="conf/cacert.pem"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

Похоже, что Tomcat версии 8.5 не поддерживает gzip с HTTP2.Есть идеи по этому поводу?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Tomcat 8.5.33 исправляет эту проблему;тогда сжатие работает с http / 2.

0 голосов
/ 20 мая 2018

Согласно документации Tomcat :

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

Поэтому попробуйте добавить useSendfile = "false" в настройку UpgradeProtocol

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" compression="on" compressionMinSize="1024" useSendfile="false" />

Обратите внимание, что этот параметр не отображается в документации 8.5 , поэтому не уверен, существует ли ондля этого (есть ссылка на это: «Вы можете отключить sendfile, установив атрибут useSendfile протокола, как описано ниже», но затем ничего ниже), хотя вы также можете отключить его на уровне сервера.

Как ни странно, я бы не ожидал, что это сработает в Tomcat 9, не отключив эту опцию, но вы говорите, что это работает?Вы уверены, что не выключили это?Или вы тестируете файл размером менее 48 КБ?

...