15.9. 了解 undertow 中的 HTTP/2
Undertow 允许使用 HTTP/2 标准,通过同一 TCP 连接压缩标头和多个流来减少延迟。它还为服务器提供在请求资源前将资源推送到客户端的功能,从而加快页面负载。
请注意,HTTP/2 仅适用于也支持 HTTP/2 标准的客户端和服务器。
大多数现代浏览器通过安全 TLS 连接(称为 h2)强制使用 HTTP/2,并且可能不支持通过普通 HTTP (称为 。仍可将 JBoss EAP 配置为使用 HTTP/2 和 h2 c)的 HTTP/2h2c,而无需使用 HTTPS,并且仅使用 HTTP 升级为普通 HTTP。在这种情况下,您可以在 HTTP 监听器中启用 HTTP/2 :
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
15.9.1. 在 Undertow 中配置 HTTP/2 复制链接链接已复制到粘贴板!
此流程解释了如何通过配置 HTTPS 侦听器在 Undertow 中启用 HTTP/2。
先决条件
- 您可以访问管理 CLI。
- 有修改服务器配置的权限。
流程
在 HTTPS 监听器上启用 HTTP/2:
---- /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true) ----
---- /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true) ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入服务器以应用更改:
---- reload ----
---- reload ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要将 HTTP/2 与 elytron 子系统搭配使用,您需要确保 Undertow 的 https-listener 中配置的 ssl-context 配置为 modifiable。这可以通过将适当 server-ssl-context 的 wrap 属性设置为 false 来实现。默认情况下,wrap 属性设为 false。Undertow 在关于 ALPN 的 ssl-context 中进行修改时需要这样做。如果提供的 ssl-context 不可写入,则无法使用 ALPN,且连接会返回 HTTP/1.1。
15.9.2. 使用 HTTP/2 时支持 ALPN 复制链接链接已复制到粘贴板!
当通过安全 TLS 连接使用 HTTP/2 时,需要一个支持 Application-Layer Protocol Negotiation (ALPN) TLS 协议扩展的 TLS 堆栈。获取此堆栈因已安装的 JDK 而异。
- 从 Java 9 开始,JDK 支持 ALPN 原生;但是,使用 OpenSSL 供应商中的 ALPN TLS 协议扩展支持时,在使用 Java 9 或更高版本时,也应该提高性能。
有关安装 OpenSSL 以获取 ALPN TLS 协议扩展支持的说明,请参考从 JBoss Core Services 安装 OpenSSL。Red Hat Enterprise Linux 8 支持标准系统 OpenSSL,且不需要额外的 OpenSSL。
安装 OpenSSL 后,请按照 xref:"configure-jboss-eap-to-use-openssl_configuring-the-web-server-undertow-in-jboss-eap"[Configure JBoss EAP 使用 OpenSSL] 中的说明进行操作。
15.9.3. 验证 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。