17.13. HTTP/2 の設定

Undertow では、HTTP/2 標準を使用できます。この標準は、ヘッダーの圧縮と多くのストリームの多重化を同じ TCP 接続で行い、待ち時間を削減します。さらに、リクエストの前にサーバーがリソースをクライアントにプッシュできる機能も提供するため、ページのロードがより速くなります。

HTTP/2 は、HTTP/2 標準をサポートするクライアントとブラウザーでのみ機能することに注意してください。

重要

最新のブラウザーは、h2 と呼ばれるセキュアな TLS 接続上の HTTP/2 を強制します。h2c と呼ばれるプレーン HTTP 上の HTTP/2 はサポートしないことがあります。h2c で HTTP/2 を使用するように JBoss EAP を設定することが可能です。つまり、HTTPS を使用せずに HTTP のアップグレードでプレーン HTTP のみを使用します。この場合、Undertow の HTTP リスナーで HTTP/2 を有効にします。

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)

HTTP/2 を使用するよう Undertow を設定するには、enable-http2 属性を true に設定し、HTTP/2 を使用するよう Undertow の HTTPS リスナーを有効にします。

/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true)

HTTPS リスナーの情報や、Web アプリケーションで HTTPS を使用するよう Undertow を設定する方法については、How to Configure Server SecurityConfigure One-way and Two-way SSL/TLS for Applications を参照してください。

注記

elytron サブシステムで HTTP/2 を使用するには、Undertow の https-listener にある設定済みの ssl-context が変更可能として設定される必要があります。これには、適切な server-ssl-contextwrap 属性を false に設定します。デフォルトでは wrap 属性は false に設定されます。これは、ALPN に関する ssl-context の変更を行うために Undertow で必要になります。提供された ssl-context が書き込み可能でない場合、ALPN は使用できず、接続は HTTP/1.1 にフォールバックします。

HTTP/2 使用時の ALPN サポート

セキュアな TLS 接続上で HTTP/2 を使用する場合、ALPN TLS プロトコル拡張をサポートする TLS スタックが必要になります。このスタックの取得はインストールされた JDK によって異なります。

  • Java 8 を使用する場合、ALPN 実装は Java 内部に依存して直接 JBoss EAP に導入されます。そのため、ALPN 実装は Oracle および OpenJDK でのみ動作します。IBM Java では動作しません。Red Hat は、ALPN 機能を実装する OpenSSL ライブラリーとともに、OpenSSL プロバイダーからの ALPN TLS プロトコル拡張サポートを JBoss EAP で使用することを推奨します。OpenSSL プロバイダーの ALPN TLS プロトコル拡張サポートを使用すると、パフォーマンスが向上します。
  • Java 9 より、JDK は ALPN をネイティブでサポートするようになりましたが、Java 9 以上を使用する場合でも OpenSSL プロバイダーからの ALPN TLS プロトコル拡張サポートを使用するとパフォーマンスが向上されるはずです。

ALPN TLS プロトコル拡張サポートを取得するための OpenSSL のインストール手順は、JBoss Core Services からの OpenSSL のインストール を参照してください。標準のシステム OpenSSL は Red Hat Enterprise Linux 8 でサポートされており、追加の JBoss Core Services OpenSSL は必要ありません。

OpenSSL がインストールされたら、OpenSSL を使用するよう JBoss EAP を設定 にある手順にしたがいます。

HTTP/2 が使用されていることを検証

Undertow が HTTP/2 を使用していることを検証するには、Undertow からのヘッダーを確認する必要があります。https を使用して JBoss EAP インスタンスに移動し (例: https://localhost:8443)、ブラウザーの開発者ツールを使用してヘッダーを確認します。Google Chrome などの一部のブラウザーは、HTTP/2 の使用時には :path:authority:method:scheme などの HTTP/2 擬似ヘッダーを表示します。Firefox や Safari などの他のブラウザーは、ヘッダーの状態またはバージョンを HTTP/2.0 と表示します。