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