17.11. HTTP/2 の設定
Undertow では、HTTP/2 標準を使用できます。この標準は、ヘッダーの圧縮と多くのストリームの多重化を同じ TCP 接続で行い、待ち時間を削減します。さらに、リクエストの前にサーバーがリソースをクライアントにプッシュできる機能も提供するため、ページのロードがより速くなります。Undertow は、新しい仕様にまだ更新していないクライアントをサポートするために、HTTP/2 の前身である SPDY とも互換性があります。
HTTP/2 は JBoss EAP 7.0 のみのテクノロジープレビューとしてサポートされており、HTTP/2 標準もサポートするブラウザーでのみ動作します。
HTTP/2 を使用するには、Java 8 を使用するだけでなく、クラスパス上に ALPN を設定する必要があります。これは、HTTP/2 では ALPN をサポートする TLS スタックが必要であるが、Java 8 のデフォルトインストールではそれが提供されないためです。
17.11.1. HTTP/2 を使用するように Undertow を設定する
Undertow が HTTP/2 を使用するように設定するには、次のことを行う必要があります。
HTTPS を使用するように Undertow を設定する
Web アプリケーションに HTTPS を使用するように Undertow を設定する 方法については、サーバーセキュリティーの設定方法ガイド を参照してください。
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 をブートクラスパスに追加する
正しいバージョンの ALPN JAR をダウンロードしたら、それを EAP_HOME/bin
にコピーします。また、$JBOSS_HOME
と $ALPN_VERSION を
適切な値に置き換えて、bin/standalone.conf
(管理対象ドメインで実行している場合は bin/domain.conf
) に以下を追加する必要があります。
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/bin/alpn-boot-$ALPN_VERSION.jar"
クラスパスの変更を有効にするには、JBoss EAP を再起動する必要があります。
HTTPS リスナーで 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 として報告されます。