HTTP2 アップグレードプロトコル

目次

はじめに

HTTP アップグレードプロトコル要素は、HTTP/2 プロトコルをサポートするアップグレードプロトコルコンポーネントを表します。このコンポーネントのインスタンスは、既存のHTTP/1.1 コネクタに関連付けられている必要があります。

HTTP/2 コネクタはノンブロッキング I/O を使用し、読み書きするデータがある場合にのみスレッドプールからコンテナスレッドを利用します。ただし、サーブレット API は基本的にブロッキングであるため、各 HTTP/2 ストリームはそのストリームの期間中、専用のコンテナスレッドを必要とします。

HTTP/2 を使用して処理されたリクエストには、以下の追加のリクエスト属性が使用可能です。

  • org.apache.coyote.connectionID は HTTP/2 接続 ID を返します。
  • org.apache.coyote.streamID は HTTP/2 ストリーム ID を返します。

属性

共通属性

アップグレードプロトコルのすべての実装は、以下の属性をサポートしています。

属性説明
className

これは org.apache.coyote.http2.Http2Protocol でなければなりません。

標準実装

HTTP/2 アップグレードプロトコル実装は、上記にリストされている共通属性に加えて、以下の属性をサポートしています。

属性説明
initialWindowSize

Tomcat がクライアントにアドバタイズするストリームのフロー制御ウィンドウの初期サイズを制御します。指定されていない場合、デフォルト値の 65535 が使用されます。

keepAliveTimeout

アクティブなストリームがない場合に、Tomcat が接続を閉じる前に HTTP/2 フレーム間で待機する時間 (ミリ秒単位) です。負の値は無限タイムアウトとして扱われます。指定されていない場合、デフォルト値の 20000 が使用されます。

maxConcurrentStreamExecution

コンテナのスレッドプールからスレッドを割り当てることができる、1つの接続に対するストリームの最大数を制御します。アクティブなストリームが使用可能なスレッド数よりも多い場合、それらのストリームはストリームが使用可能になるまで待機する必要があります。指定されていない場合、デフォルト値の 20 が使用されます。

maxConcurrentStreams

1つの接続に対して許可されるアクティブなストリームの最大数を制御します。クライアントがこの制限を超えるアクティブなストリームを開こうとすると、ストリームは STREAM_REFUSED エラーでリセットされます。指定されていない場合、デフォルト値の `100` が使用されます。

maxHeaderCount

コンテナで許可されるリクエストのヘッダーの最大数です。指定された制限を超えるヘッダーを含むリクエストは拒否されます。0 未満の値は制限がないことを意味します。指定しない場合、デフォルト値の 100 が使用されます。

maxTrailerCount

コンテナで許可されるリクエストのトレーラーヘッダーの最大数です。指定された制限を超えるトレーラーヘッダーを含むリクエストは拒否されます。0 未満の値は制限がないことを意味します。指定しない場合、デフォルト値の 100 が使用されます。

overheadContinuationThreshold

最終でない CONTINUATION フレームのペイロードサイズが、オーバーヘッドカウントの増加をトリガーするしきい値です (overheadCountFactor を参照)。オーバーヘッドカウントは overheadContinuationThreshold/payloadSize だけ増加するため、CONTINUATION フレームが小さいほど、オーバーヘッドカウントの増加が大きくなります。ゼロ以下の値は、最終でない CONTINUATION フレームのチェックを無効にします。指定されていない場合、デフォルト値の 1024 が使用されます。

overheadCountFactor

接続のオーバーヘッドが高すぎて閉じなければならないかどうかを判断するために、オーバーヘッドフレームをカウントするときに適用する係数です。オーバーヘッドカウントは -10 * overheadCountFactor から始まります。送受信された各データフレームと受信された各ヘッダーフレームごとにカウントは 20 ずつ減少します。受信した設定、優先順位、優先順位の更新、および ping フレームごとに、カウントは overheadCountFactor だけ増加します。オーバーヘッドカウントがゼロを超えると、接続は閉じられます。1 未満の値はこの保護を無効にします。通常の使用では、約 20 以上の値は、ストリームが完了する前に接続を閉じます。指定されていない場合、デフォルト値の 10 が使用されます。

overheadResetFactor

受信したリセットフレームごとにオーバーヘッドカウント (overheadCountFactor を参照) が増加する量です。指定されていない場合、デフォルト値の 50 が使用されます。ゼロ未満の値はゼロとして扱われます。

overheadDataThreshold

現在と以前の最終でない DATA フレームの平均ペイロードサイズが、オーバーヘッドカウントの増加をトリガーするしきい値です (overheadCountFactor を参照)。オーバーヘッドカウントは `overheadDataThreshold/average` だけ増加するため、平均値が小さいほど、オーバーヘッドカウントの増加が大きくなります。ゼロ以下の値は、最終でない `DATA` フレームのチェックを無効にします。指定されていない場合、デフォルト値の `1024` が使用されます。

overheadWindowUpdateThreshold

現在と以前の WINDOW_UPDATE フレームの平均サイズが、オーバーヘッドカウントの増加をトリガーするしきい値です (overheadCountFactor を参照)。オーバーヘッドカウントは overheadWindowUpdateThreshold/average だけ増加するため、平均値が小さいほど、オーバーヘッドカウントの増加が大きくなります。ゼロ以下の値は、WINDOW_UPDATE フレームのチェックを無効にします。指定されていない場合、デフォルト値の 1024 が使用されます。

readTimeout

部分的な HTTP/2 フレームが受信されたときに、Tomcat が追加データの到着を待機する時間 (ミリ秒単位) です。負の値は無限タイムアウトとして扱われます。指定されていない場合、デフォルト値の 5000 が使用されます。

streamReadTimeout

アプリケーションがブロッキング I/O 読み取りを実行していて、追加のデータが必要な場合に、Tomcat がストリームに追加のデータフレームが到着するのを待機する時間 (ミリ秒単位) です。負の値は無限タイムアウトとして扱われます。指定されていない場合、デフォルト値の 20000 が使用されます。

streamWriteTimeout

アプリケーションがブロッキング I/O 書き込みを実行していて、ストリームおよび/または接続のフロー制御ウィンドウが小さすぎて書き込みを完了できない場合に、Tomcat がストリームおよび/または接続に追加のウィンドウ更新フレームが到着するのを待機する時間 (ミリ秒単位) です。負の値は無限タイムアウトとして扱われます。指定されていない場合、デフォルト値の 20000 が使用されます。

useSendfile

このブール属性を使用して、sendfile 機能を有効または無効にします。デフォルト値は true です。

関連付けられたコネクタuseAsyncIO 属性が false に設定されている場合、この設定は無視され、sendfile 機能は無効になります。

HTTP/2 sendfile 機能は、Windows でファイルのロックを引き起こすことが知られている MappedByteBuffer を使用します。

writeTimeout

HTTP/2 フレームが部分的に書き込まれたときに、Tomcat が追加データの書き込みを待機する時間 (ミリ秒単位) です。負の値は無限タイムアウトとして扱われます。指定されていない場合、デフォルト値の 5000 が使用されます。

HTTP/2 アップグレードプロトコルは、ネストされている HTTP コネクタ から以下の制限も継承します。

  • allowedTrailerHeaders
  • compressibleMimeType
  • compression
  • compressionMinSize
  • maxCookieCount
  • maxHttpHeaderSize
  • maxHttpRequestHeaderSize
  • maxParameterCount
  • maxPostSize
  • maxSavePostSize
  • maxTrailerSize
  • noCompressionUserAgents

ネストされたコンポーネント

このコンポーネントは、ネストされたコンポーネントをサポートしていません。

特別な機能

このコンポーネントは、特別な機能をサポートしていません。