17.11. 配置 HTTP/2
Undertow 允许使用 HTTP/2 标准,这可以通过压缩标头和通过同一 TCP 连接的多个流来缩短延迟。它还提供在请求资源前将资源推送到客户端的功能,从而加快页面负载。Undertow 也与 SPDY (即到 HTTP/2 的前身)兼容,以支持尚未更新到新规范的客户端。
HTTP/2 只支持 JBoss EAP 7.0 的技术预览,并且仅可用于同时支持 HTTP/2 标准的浏览器。
使用 HTTP/2 要求使用 Java 8,并在类路径上设置 ALPN。这是因为 HTTP/2 需要支持 ALPN 的 TLS 堆栈,该堆栈不由 Java 8 的默认安装提供。
17.11.1. 将 Undertow 配置为使用 HTTP/2
要将 Undertow 配置为使用 HTTP/2,必须执行以下操作:
将 Undertow 配置为使用 HTTPS
请参阅 如何配置服务器安全指南,以便将 Undertow 配置为使用 HTTPS 进行 Web 应用。
可以在不使用 HTTPS 的情况下使用 HTTP/2,换句话说,只有使用 HTTP 升级的普通 HTTP。在这种情况下,您不需要安装 ALPN,且可以在 Undertow 中简单地启用 HTTP/2:
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
下载 ALPN JAR
首先确定您拥有的 Java 的特定版本。在终端中运行以下命令,以输出已安装的 Java 版本:
java -version
根据您的版本,参考 此页面 以确定从 此页面 下载的 ALPN JAR 的正确版本。例如,如果您正在运行 Java 版本 1.8.0_51
,您可以使用 ALPN 版本 8.1.4.v20150727
并下载 alpn-boot-8.1.4.v20150727.jar
。
将 ALPN JAR 添加到 Boot Classpath
下载 ALPN JAR 的正确版本后,将它复制到 EAP_HOME/bin
。您还必须将以下内容添加到 bin/standalone.conf
(如果在受管域中运行,则为 bin/domain.conf
)将 $JBOSS_HOME
和 $ALPN_VERSION
替换为适当的值。
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/bin/alpn-boot-$ALPN_VERSION.jar"
您必须重启 JBoss EAP 才能使类路径更改生效。
在 HTTPS Listener 中启用 HTTP/2
要在 Undertow 中启用 HTTPS 侦听器以使用 HTTP/2,您必须将 enable-http2 属性设置为 true :
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true)
验证 HTTP/2 是否正在使用
要验证 Undertow 是否使用 HTTP/2,您需要检查来自 Undertow 的标头。使用 https 导航到您的 JBoss EAP 实例,如 https://localhost:8443,并使用浏览器的开发人员工具检查标头。例如 Google Chrome 的一些浏览器会在使用 HTTP/2 时显示 HTTP/2 伪标头(:path、:authority、:method 和 :scheme),而其他浏览器(如 Firefox 和 Safari)会将标头的状态或版本报告为 HTTP/2.0。