【发布时间】:2018-10-30 03:58:48
【问题描述】:
我正在使用 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。对此有什么想法吗?
【问题讨论】: