首页 > 解决方案 > OS X 上的 Tomcat 9.0.16:Safari 无法通过 HTTP/2 加载 gzip 压缩的内容

问题描述

我们正在使用 OpenJDK 11.0.1+13 在 OS X Mojave (10.14.3) 上运行 Tomcat 9.0.16 服务器,并且正在升级到 HTTP/2。但是,使用此配置,Safari 无法从服务器加载任何 gzip 压缩的内容并输出错误消息“网络连接丢失。”。这实际上只在加载 gzip 压缩的内容时发生;关闭 HTTP/2 升级协议 (org.apache.coyote.http2.Http2Protocol) 的压缩可以解决问题。其他浏览器似乎没有这个问题(在最新的 Edge、Firefox 和 Chrome 上测试成功)。

我们已经尝试过的:

目前,我们唯一的选择是要么使用不压缩的 HTTP/2,要么降级到 HTTP/1.1。我注意到 Debian apache2 bugtracker 上有一个类似的错误:https ://bugs.debian.org/cgi-bin/bugreport.cgi?bug=915103 。可能是相关的,因为这个错误看起来很相似,而且只有 Safari 受到影响。

有没有人有任何提示可能是这里的问题?Tomcat的错误?Safari 漏洞?JVM错误?直到现在,我还没有找到这个问题的根源,而且 Tomcat 的日志文件似乎也没有帮助。

非常感谢您的帮助。

标签: tomcatsafaricompressiongziphttp2

解决方案


有完全相同的问题(tomcat 版本是 9.021)。问题是我们将 useSendfile 设置为 false。默认值为 true - 因此您可以将其排除在外。它以前确实有效,但后来苹果改变了一些东西。验证它是否适用于较旧的 MacOS 版本(想想 sierra 左右)。

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

/>

GZIP 和 Http2 现在可以在 Ipad(chrome、safari)上运行。


推荐阅读