HTTP/2 アップグレードプロトコル

目次

はじめに

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

HTTP/2コネクタは非ブロッキングI/Oを使用し、読み書きするデータがある場合にのみスレッドプールからコンテナスレッドを利用します。ただし、Servlet 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 アップグレードプロトコル実装は、上記の共通属性に加えて、以下の属性をサポートしています。

属性説明
discardRequestsAndResponses

コンテナ内部のリクエストおよびレスポンス処理オブジェクトの再利用を有効または無効にするために使用できるブール値です。trueに設定すると、リクエストおよびレスポンスオブジェクトは、すべてのリクエスト後にガベージコレクションの対象となります。それ以外の場合は再利用されます。指定しない場合、この属性はfalseに設定されます。

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です。

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

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

writeTimeout

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

HTTP/2アップグレードプロトコルは、それがネストされているHTTP Connectorから以下の属性も継承します

  • allowedTrailerHeaders
  • compressibleMimeType
  • compression
  • compressionMinSize
  • maxCookieCount
  • maxHttpHeaderSize
  • maxHttpRequestHeaderSize
  • maxParameterCount
  • maxPartCount
  • maxPartHeaderSize
  • maxPostSize
  • maxSavePostSize
  • maxTrailerSize
  • noCompressionUserAgents
  • server
  • serverRemoveAppProvidedValues

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

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

特殊機能

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