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