Hi,

I am trying to run Tomcat with HTTP/2 support. Everything works perfectly
fine until I enable content compression.
Google Chrome on Mac OS is OK with gzip compression. Apple Safari on Mac OS
and iOS fail with “The operation couldn’t be completed. Protocol error”
(NSPOSIXErrorDomain:100). iOS URLSession also does not work.
Is it something wrong with my configuration or code?
Please see below server setup, connector configuration and servlet code.

Server version: Apache Tomcat/8.5.39
Server built:   Mar 14 2019 11:24:26 UTC
Server number:  8.5.39.0
OS Name:        Mac OS X
OS Version:     10.13.6
Architecture:   x86_64
JVM Version:    9.0.1+11
JVM Vendor:     Oracle Corporation
Loaded APR based Apache Tomcat Native library [1.2.21] using APR version
[1.6.5].
APR capabilities: IPv6 [true], sendfile [true], accept filters [false],
random [true].
APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
OpenSSL successfully initialized [OpenSSL 1.0.2r  26 Feb 2019]
The ["https-openssl-nio-8080"] connector has been configured to support
negotiation to [h2] via ALPN


<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
           asyncTimeout="20000"
           URIEncoding="utf-8"
           acceptorThreadCount="1"

 
compressibleMimeType="text/html,text/xml,text/plain,text/x-json,application/javascript,application/json,text/css"
           compression="force"
           connectionTimeout="20000"
           minSpareThreads="2"
           maxThreads="1024"
           processorCache="512"
           useSendfile="true"
           SSLEnabled="true"
           secure="true" >
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"

compressibleMimeType="text/html,text/xml,text/plain,text/x-json,application/javascript,application/json,text/css"
                compression="force" />
    <SSLHostConfig><Certificate certificateKeyFile="xxx"
certificateFile="yyy" certificateChainFile="zzz" type="RSA"
/></SSLHostConfig>
</Connector>


public class TestServlet extends javax.servlet.http.HttpServlet {
protected void doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws
javax.servlet.ServletException, java.io.IOException {
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("Lorem ipsum dolor sit amet");
}
}


Thank you,
Kirill

Reply via email to