我正在使用 Tomcat 8.5.29 并使用相应的配置,我已为该站点启用了 HTTP2 支持。以下是 server.xml 文件中的配置。
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" compression="on" compressionMinSize="1024"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-key.pem"
certificateFile="conf/localhost-cert.pem"
certificateChainFile="conf/cacert.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
当我尝试比较支持 HTTPS 1.1 和 HTTP2 的网站的页面加载时间时,结果并不一致。与 HTTPS 1.1 相比,有时加载时间较长,有时加载时间较短。
为了测量页面加载时间,我使用 Chrome 浏览器中的开发人员工具。
后来,我发现 HTTP/2 的加载时间更长,因为响应中的“内容编码”不是 gzip。使用 HTTP/1.1,脚本文件大小为 4 MB (gzip),而使用 HTTP/2,相同文件大小为 8 MB(无内容编码)。压缩没有发生。我们还尝试使用 useSendfile 和压缩作为“强制”,但它不起作用。
我们也尝试过 Tomcat 8.5.31 版本,但没有成功!面临同样的问题。
我们使用 Tomcat 版本 9 并使用以下配置,获取 gzip 中的内容(压缩)。现在,通过快速页面加载,文件大小减少了 2 MB。
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" compression="on" compressionMinSize="1024" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-key.pem"
certificateFile="conf/localhost-cert.pem"
certificateChainFile="conf/cacert.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
看起来 Tomcat 版本 8.5 不支持 HTTP2 的 gzip。对此有什么想法吗?