You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Aayush Dev <cm...@gmail.com> on 2018/07/25 22:05:38 UTC

HTTP2 compression on Tomcat 8.5.31

With Tomcat 8.5.31, I cant enable gzip compression with HTTP2 protocol. If
someone has successfully enabled compression on Tomcat 8.5 with HTTP2
protocol, please help me with correct configuration.

Things tried:
- tried with and without useSendfile="false" attribute under
UpgradeProtocol.
- turned off "useSendfile" by adding "sendfileSize=-1" init-param for
default servlet under conf/web.xml
- tried APR (with OpenSSL) connector too instead of NIO
- compression is not working with Chrome and Firefox (latest ver.)
- testing with default ROOT webapp to avoid any other conflicting setting
- gzip compression works with same setting on Tomcat 9.0.5
- using openjdk 10.0.1 (and tried with Oracle Java 1.8.0_144)

Using the following connector:
<Connector

protocol="org.apache.coyote.http11.Http11NioProtocol"

port="8443"

URIEncoding="UTF-8"

maxPostSize="40960000"

maxHttpHeaderSize="1024000"

maxThreads="2500"

enableLookups="false"

SSLEnabled="true"

scheme="https"

secure="true"

compression="on"

noCompressionUserAgents="gozilla,traviata"

compressableMimeType=
"text/html,text/json,application/json,text/xml,text/plain,application/javascript,text/css,text/javascript,text/js"

useSendfile="false"

compressionMinSize="500">

<UpgradeProtocol

className="org.apache.coyote.http2.Http2Protocol"

compression="on"

compressionMinSize="500"

keepAliveTimeout="60000"

maxConcurrentStreamExecution="200"

maxConcurrentStreams="200"

maxHeaderSize="1024000"

noCompressionUserAgents="gozilla,traviata"

useSendfile="false" />

<SSLHostConfig certificateVerification="none"

honorCipherOrder="true" protocols="TLSv1.1,TLSv1.2"

ciphers=
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
>

<Certificate

certificateKeystoreFile="conf/KeystoreFile.jks"

certificateKeystorePassword="xxxxxx"

certificateKeystoreType="JKS" />

</SSLHostConfig>

</Connector>

Request headers (from Chrome):
:authority: localhost:8443
:method: GET
:path: /tomcat.css
:scheme: https
accept: text/css,*/*;q=0.1
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cache-control: no-cache
pragma: no-cache
referer: https://localhost:8443/
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

Response headers (from Chrome):
accept-ranges: bytes
content-type: text/css
date: Wed, 25 Jul 2018 21:48:16 GMT
etag: W/"5931-1524878698000"
last-modified: Sat, 28 Apr 2018 01:24:58 GMT
status: 200


Thanks in advance.

Re: HTTP2 compression on Tomcat 8.5.31

Posted by Pierre Chiu <pc...@gmail.com>.
Hi Aayush,

Are you saying this combo, Tomcat 9.0.5, Oracle Java 1.8.0_144, gzip works with HTTP2? Is it windows or linux?  That is good to know.

Regarding tomcat 8.5.31, I don't think config file is the issue. Unfortunately, I don't have the skill to help the developer to debug the problem.

see this thread in detail.

https://www.mail-archive.com/users@tomcat.apache.org/msg128302.html <https://www.mail-archive.com/users@tomcat.apache.org/msg128302.html>




> On Jul 25, 2018, at 6:05 PM, Aayush Dev <cm...@gmail.com> wrote:
> 
> With Tomcat 8.5.31, I cant enable gzip compression with HTTP2 protocol. If
> someone has successfully enabled compression on Tomcat 8.5 with HTTP2
> protocol, please help me with correct configuration.
> 
> Things tried:
> - tried with and without useSendfile="false" attribute under
> UpgradeProtocol.
> - turned off "useSendfile" by adding "sendfileSize=-1" init-param for
> default servlet under conf/web.xml
> - tried APR (with OpenSSL) connector too instead of NIO
> - compression is not working with Chrome and Firefox (latest ver.)
> - testing with default ROOT webapp to avoid any other conflicting setting
> - gzip compression works with same setting on Tomcat 9.0.5
> - using openjdk 10.0.1 (and tried with Oracle Java 1.8.0_144)
> 
> Using the following connector:
> <Connector
> 
> protocol="org.apache.coyote.http11.Http11NioProtocol"
> 
> port="8443"
> 
> URIEncoding="UTF-8"
> 
> maxPostSize="40960000"
> 
> maxHttpHeaderSize="1024000"
> 
> maxThreads="2500"
> 
> enableLookups="false"
> 
> SSLEnabled="true"
> 
> scheme="https"
> 
> secure="true"
> 
> compression="on"
> 
> noCompressionUserAgents="gozilla,traviata"
> 
> compressableMimeType=
> "text/html,text/json,application/json,text/xml,text/plain,application/javascript,text/css,text/javascript,text/js"
> 
> useSendfile="false"
> 
> compressionMinSize="500">
> 
> <UpgradeProtocol
> 
> className="org.apache.coyote.http2.Http2Protocol"
> 
> compression="on"
> 
> compressionMinSize="500"
> 
> keepAliveTimeout="60000"
> 
> maxConcurrentStreamExecution="200"
> 
> maxConcurrentStreams="200"
> 
> maxHeaderSize="1024000"
> 
> noCompressionUserAgents="gozilla,traviata"
> 
> useSendfile="false" />
> 
> <SSLHostConfig certificateVerification="none"
> 
> honorCipherOrder="true" protocols="TLSv1.1,TLSv1.2"
> 
> ciphers=
> "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
>> 
> 
> <Certificate
> 
> certificateKeystoreFile="conf/KeystoreFile.jks"
> 
> certificateKeystorePassword="xxxxxx"
> 
> certificateKeystoreType="JKS" />
> 
> </SSLHostConfig>
> 
> </Connector>
> 
> Request headers (from Chrome):
> :authority: localhost:8443
> :method: GET
> :path: /tomcat.css
> :scheme: https
> accept: text/css,*/*;q=0.1
> accept-encoding: gzip, deflate, br
> accept-language: en-US,en;q=0.9
> cache-control: no-cache
> pragma: no-cache
> referer: https://localhost:8443/
> user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
> (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
> 
> Response headers (from Chrome):
> accept-ranges: bytes
> content-type: text/css
> date: Wed, 25 Jul 2018 21:48:16 GMT
> etag: W/"5931-1524878698000"
> last-modified: Sat, 28 Apr 2018 01:24:58 GMT
> status: 200
> 
> 
> Thanks in advance.


Re: HTTP2 compression on Tomcat 8.5.31

Posted by Aayush Dev <cm...@gmail.com>.
Just want to point out there is no useSendfile attribute for Upgrade
Protocol in documentation for Tomcat 8.5 (
https://tomcat.apache.org/tomcat-8.5-doc/config/http2.html). It is present
in Tomcat 9 (https://tomcat.apache.org/tomcat-9.0-doc/config/http2.html).

On Wed, Aug 1, 2018 at 6:24 PM, Aayush Dev <cm...@gmail.com> wrote:

> Thanks Mark. Will wait for the release for our next production upgrade.
>
> -Aayush
>
> On Wed, Aug 1, 2018 at 5:08 PM, pc8888@gmail.com <pc...@gmail.com> wrote:
>
>> Hurray!
>>
>>
>> > Mark Thomas <ma...@apache.org> 於 2018年8月1日 下午4:27 寫道:
>> >
>> >> On 25/07/18 23:05, Aayush Dev wrote:
>> >> With Tomcat 8.5.31, I cant enable gzip compression with HTTP2
>> protocol. If
>> >> someone has successfully enabled compression on Tomcat 8.5 with HTTP2
>> >> protocol, please help me with correct configuration.
>> >
>> > Clean Tomcat 8.5.x dev build
>> > (should work with any release from 8.5.27 onwards)
>> >
>> > Java 9 (just so I don't have to configure the native library)
>> >
>> > Configure HTTP/2 and confirm, via start-up logs it is working.
>> > - Uncomment the NIO HTTPS connector
>> > - Add the UpgradeProtocol (copied from the APT HTTPS connector)
>> > ... The ["https-jsse-nio-8443"] connector has been configured to support
>> > negotiation to [h2] via ALPN
>> >
>> > Request /tomcat.css (a compressible resource)
>> >
>> > 5581 bytes
>> >
>> > Uncompressed. As expected.
>> >
>> > Edit server.xml and add attribute compression="on" to UpgradeProtocol
>> > (making sure it is added to the element nested in the NIO HTTPS
>> Connector)
>> >
>> > Restart Tomcat
>> >
>> > Request /tomcat.css
>> >
>> > Hmm. Still not compressed...
>> >
>> > Double check config. Looks OK...
>> >
>> > Time to fire up remote debugging in the IDE.
>> >
>> > Find bug. Fix bug. Retest.
>> >
>> > 1712 bytes. That is more like it.
>> >
>> > The fix will be in the next release. As we are at the start of the month
>> > I'm hoping to start the next 9.0.x and 8.5.x releases in the next few
>> days.
>> >
>> > Mark
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> > For additional commands, e-mail: users-help@tomcat.apache.org
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
>

Re: HTTP2 compression on Tomcat 8.5.31

Posted by Aayush Dev <cm...@gmail.com>.
Thanks Mark. Will wait for the release for our next production upgrade.

-Aayush

On Wed, Aug 1, 2018 at 5:08 PM, pc8888@gmail.com <pc...@gmail.com> wrote:

> Hurray!
>
>
> > Mark Thomas <ma...@apache.org> 於 2018年8月1日 下午4:27 寫道:
> >
> >> On 25/07/18 23:05, Aayush Dev wrote:
> >> With Tomcat 8.5.31, I cant enable gzip compression with HTTP2 protocol.
> If
> >> someone has successfully enabled compression on Tomcat 8.5 with HTTP2
> >> protocol, please help me with correct configuration.
> >
> > Clean Tomcat 8.5.x dev build
> > (should work with any release from 8.5.27 onwards)
> >
> > Java 9 (just so I don't have to configure the native library)
> >
> > Configure HTTP/2 and confirm, via start-up logs it is working.
> > - Uncomment the NIO HTTPS connector
> > - Add the UpgradeProtocol (copied from the APT HTTPS connector)
> > ... The ["https-jsse-nio-8443"] connector has been configured to support
> > negotiation to [h2] via ALPN
> >
> > Request /tomcat.css (a compressible resource)
> >
> > 5581 bytes
> >
> > Uncompressed. As expected.
> >
> > Edit server.xml and add attribute compression="on" to UpgradeProtocol
> > (making sure it is added to the element nested in the NIO HTTPS
> Connector)
> >
> > Restart Tomcat
> >
> > Request /tomcat.css
> >
> > Hmm. Still not compressed...
> >
> > Double check config. Looks OK...
> >
> > Time to fire up remote debugging in the IDE.
> >
> > Find bug. Fix bug. Retest.
> >
> > 1712 bytes. That is more like it.
> >
> > The fix will be in the next release. As we are at the start of the month
> > I'm hoping to start the next 9.0.x and 8.5.x releases in the next few
> days.
> >
> > Mark
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> > For additional commands, e-mail: users-help@tomcat.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Re: HTTP2 compression on Tomcat 8.5.31

Posted by "pc8888@gmail.com" <pc...@gmail.com>.
Hurray!


> Mark Thomas <ma...@apache.org> 於 2018年8月1日 下午4:27 寫道:
> 
>> On 25/07/18 23:05, Aayush Dev wrote:
>> With Tomcat 8.5.31, I cant enable gzip compression with HTTP2 protocol. If
>> someone has successfully enabled compression on Tomcat 8.5 with HTTP2
>> protocol, please help me with correct configuration.
> 
> Clean Tomcat 8.5.x dev build
> (should work with any release from 8.5.27 onwards)
> 
> Java 9 (just so I don't have to configure the native library)
> 
> Configure HTTP/2 and confirm, via start-up logs it is working.
> - Uncomment the NIO HTTPS connector
> - Add the UpgradeProtocol (copied from the APT HTTPS connector)
> ... The ["https-jsse-nio-8443"] connector has been configured to support
> negotiation to [h2] via ALPN
> 
> Request /tomcat.css (a compressible resource)
> 
> 5581 bytes
> 
> Uncompressed. As expected.
> 
> Edit server.xml and add attribute compression="on" to UpgradeProtocol
> (making sure it is added to the element nested in the NIO HTTPS Connector)
> 
> Restart Tomcat
> 
> Request /tomcat.css
> 
> Hmm. Still not compressed...
> 
> Double check config. Looks OK...
> 
> Time to fire up remote debugging in the IDE.
> 
> Find bug. Fix bug. Retest.
> 
> 1712 bytes. That is more like it.
> 
> The fix will be in the next release. As we are at the start of the month
> I'm hoping to start the next 9.0.x and 8.5.x releases in the next few days.
> 
> Mark
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: HTTP2 compression on Tomcat 8.5.31

Posted by Mark Thomas <ma...@apache.org>.
On 25/07/18 23:05, Aayush Dev wrote:
> With Tomcat 8.5.31, I cant enable gzip compression with HTTP2 protocol. If
> someone has successfully enabled compression on Tomcat 8.5 with HTTP2
> protocol, please help me with correct configuration.

Clean Tomcat 8.5.x dev build
(should work with any release from 8.5.27 onwards)

Java 9 (just so I don't have to configure the native library)

Configure HTTP/2 and confirm, via start-up logs it is working.
- Uncomment the NIO HTTPS connector
- Add the UpgradeProtocol (copied from the APT HTTPS connector)
... The ["https-jsse-nio-8443"] connector has been configured to support
negotiation to [h2] via ALPN

Request /tomcat.css (a compressible resource)

5581 bytes

Uncompressed. As expected.

Edit server.xml and add attribute compression="on" to UpgradeProtocol
(making sure it is added to the element nested in the NIO HTTPS Connector)

Restart Tomcat

Request /tomcat.css

Hmm. Still not compressed...

Double check config. Looks OK...

Time to fire up remote debugging in the IDE.

Find bug. Fix bug. Retest.

1712 bytes. That is more like it.

The fix will be in the next release. As we are at the start of the month
I'm hoping to start the next 9.0.x and 8.5.x releases in the next few days.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org