<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションが、API のレスポンスとして HTTP ステータス コード 431 Request Header Fields Too
Large
とエラーコード protocol.http.TooBigHeaders
を取得します。
できます。
エラー メッセージ
クライアント アプリケーションが次のレスポンス コードを受け取ります。
HTTP/1.1 431 Request Header Fields Too Large
また、次のエラー メッセージが表示される場合があります。
{ "fault":{ "faultstring":"request headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }<ph type="x-smartling-placeholder">
考えられる原因
このエラーは、クライアント アプリケーションから送信されたすべてのリクエスト ヘッダーの合計サイズが HTTP リクエストの一部である Apigee Edge は、 Apigee Edge で許可される上限 <ph type="x-smartling-placeholder"></ph> RFC 6585、セクション 5: 431 Request Header Fields Too Large。
このエラーには、次の原因が考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
リクエスト ヘッダーのサイズが上限を超えています | HTTP リクエストの一部としてクライアント アプリケーションから送信されるすべてのヘッダーの合計サイズ。 Apigee Edge が Apigee Edge で許可されている上限を超えています。 | Edge Public Cloud ユーザーと Edge Private Cloud ユーザー |
共通の診断手順
このエラーを診断するには、次のいずれかのツールまたは手法を使用します。
API Monitoring
<ph type="x-smartling-placeholder">API Monitoring を使用してエラーを診断するには:
- <ph type="x-smartling-placeholder"></ph> Apigee Edge UI にログインするユーザーとして、 付与します。
問題を調査する組織に切り替えます。
- [Analyze] >API モニタリング >Investigate ページをご覧ください。
- エラーが発生した期間を選択します。
- 障害コードを Time に対してプロットします。
- 障害コードが
protocol.http.TooBigHeaders
であるセルを選択し、 次のようにステータス コード431
を指定します。( 拡大画像を表示)
障害コード
protocol.http.TooBigHeaders
に関する情報が表示されます。 次のように指定します。( 拡大画像を表示)
[ログを表示] をクリックし、失敗したリクエストの行を開きます。
( 拡大画像を表示)
[ログ] ウィンドウで、次の詳細をメモします。
- ステータス コード:
431
- 障害の発生元:
apigee
- 障害コード:
protocol.http.TooBigHeaders
- リクエストの長さ(バイト):
32150 (> 25 KB)
- ステータス コード:
- [Fault Source] の値が
apigee
またはMP
の場合、 障害コードの値はprotocol.http.TooBigHeaders
です。 [Request Length] が 25 KB を超えている場合は、 HTTP リクエストの一部としてクライアント アプリケーションから送信されるすべてのリクエスト ヘッダー より Apigee で許容される上限。 <ph type="x-smartling-placeholder">
Trace ツール
<ph type="x-smartling-placeholder">NGINX
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーは、NGINX アクセスログを使用して次のことを行えます。
HTTP
431
エラーに関する重要な情報を確認する。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ここで、 ORG、ENV、PORT# は実際の値に置き換えられます。
- 特定の期間に
431
エラーがないか検索して確認できます (過去に発生した場合)か、引き続き失敗するリクエストがあるかどうかを431
。 X-Apigee-fault-code で
431
エラーが見つかった場合 (protocol.http.TooBigHeaders
の値と一致するもの)を求め、 X-Apigee-fault-source. の値。NGINX アクセスログの上記のサンプル エントリには、次の値が含まれます。 X-Apigee-fault-code と X-Apigee-fault-code
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source MP
リクエストの長さに注意する:
40159
(40 KB は 25 KB より大きく、 Apigee Edge のリクエスト ヘッダーに許可される上限)上記のサンプル ログエントリでは、X-Apigee-fault-source の値が
<ph type="x-smartling-placeholder">apigee
またはMP
の場合、X-Apigee-fault-code の値はprotocol.http.TooBigHeaders
と [Request Length] は 40 KB Apigee で許可されている上限(25 KB)を超える場合があります。これは明らかに、広告が HTTP の一部としてクライアント アプリケーションによって送信されるすべてのリクエスト ヘッダーの合計サイズ リクエストが Apigee Edge で許容される上限の 25 KB を超えています。
原因: リクエスト ヘッダーのサイズが上限を超えている
診断
- [Fault Code]、[Fault Source]、[Request-Length size] の値を決定します。 API Monitoring または NGINX Access のログを使用して確認されたエラー 一般的な診断手順。
- [Fault Source] の値が
apigee
またはMP
の場合、 障害コード の値はprotocol.http.TooBigHeaders
です。 [Request Length] が 25 KB を超える場合、 は、クライアント アプリケーションから Apigee に送信されたリクエスト サイズが Apigee Edge で許可されている上限をご覧ください。 - 次のいずれかを使用して、リクエスト ヘッダーのサイズが 25 KB の上限を超えていることを確認できます。
次のメソッドを使用します。
エラー メッセージ
エラー メッセージを使用して検証するには:
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstring
をご覧ください。faultstring
は、 リクエスト ヘッダーの合計サイズが上限の 25 KB を超えている。エラー メッセージの例:
"faultstring":"request headers size exceeding 25,600"
実際のリクエスト
実際のリクエストを使用して検証するには:
クライアント アプリケーションから行われた実際のリクエストにアクセスできる場合は、 次の操作を行います。
- リクエストで渡されるヘッダーのサイズを確認します。
ヘッダーの合計サイズが Apigee Edge で許可されている上限を超えている場合、 問題の原因を特定します。
リクエストの例:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
上記のケースでは、ヘッダーの合計サイズが
header0
さん、header1
さん、header2
さん、header3
が 25 KB を超えている場合、すなわち、 25 K を超える ASCII 文字(バイト)他のクライアントを使用している場合は、クライアント ログを確認し、 Apigee Edge に送信されるリクエスト行のサイズを確認します。
Message Processor のログ
Message Processor ログを使用して検証するには:
<ph type="x-smartling-placeholder">Private Cloud ユーザーは、Message Processor のログを使用して リクエスト ヘッダーのサイズが Apigee Edge で許可されている上限をご覧ください。
Message Processor のログを確認します。
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 特定の期間に
431
エラーがないか検索する 問題が発生したか、問題が発生したか まだ431
で失敗しています。次の検索文字列を使用できます。grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
system.log
から次のような行が表示されます。2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
テキスト
message = request headers size exceeding 25,600
上記のエラー メッセージは、リクエスト ヘッダーの合計サイズが 25 KB。そのため、Apigee Edge は例外をスローします。com.apigee.errors.http.user.RequestHeadersTooLarge
、返品可能 障害コードprotocol.http.TooBigHeaders
とともに431
ステータス コードをクライアント アプリケーションに送信します。
解決策
<ph type="x-smartling-placeholder">
サイズを修正
オプション 1 [推奨]: 次を使用してリクエスト ヘッダーを送信しないようにクライアント アプリケーションを修正します。 合計サイズが上限を超えています
<ph type="x-smartling-placeholder">- 特定のクライアントがサイズの大きなリクエスト ヘッダーを送信する理由を分析する サイズが原因で、ヘッダーの合計サイズが 制限。
これが望ましくない場合は、次のコマンドを実行するようにクライアント アプリケーションを修正します。 上限より小さいサイズのリクエスト ヘッダー。
上記の例では、長いヘッダーを渡すことでこの問題を解決できます。 values パラメータを指定します。
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- 上限を超えてヘッダーを送信することが望ましい場合は、 選択します
CwC
オプション 2 : CwC プロパティを使用してリクエスト行の上限を引き上げる
<ph type="x-smartling-placeholder">Apigee では、 CwC プロパティ: リクエスト行のサイズ上限を増やすことができます。 詳しくは、 <ph type="x-smartling-placeholder"></ph> Message Processor でリクエスト行の上限を設定する
<ph type="x-smartling-placeholder">上限
Apigee では、クライアント アプリケーションとバックエンド サーバーが ドキュメントに記載されている上限を超えるサイズを持つリクエスト/レスポンス ヘッダー リクエスト/レスポンス ヘッダーのサイズ上限 Apigee Edge の制限。
- Public Cloud ユーザーの場合、 リクエスト ヘッダーとレスポンス ヘッダーのサイズは、リクエスト/レスポンス ヘッダーのサイズに記載されています。 Apigee Edge の制限。
- Private Cloud ユーザー の場合は、デフォルトの上限を変更した可能性があります。 リクエスト ヘッダーとレスポンス ヘッダーのサイズ制限。 リクエスト ヘッダーの最大サイズの上限は、 現在の上限を確認する方法
現在の上限を確認する方法
<ph type="x-smartling-placeholder">
このセクションでは、プロパティ HTTPRequest.headers.limit
に以下が設定されていることを確認する方法について説明します。
Message Processor 上の新しい値で更新されました。
- Message Processor マシンで、次のプロパティを検索します。
HTTPRequest.headers.limit
(/opt/apigee/edge-message-processor/conf
ディレクトリを作成し、 次のように設定されている値を確認します。grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- 上記のコマンドのサンプル結果は次のとおりです。
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
上記の出力例では、プロパティ
HTTPRequest.headers.limit
がhttp.properties
の値25k
に設定されています。これは、Apigee for Private で構成されたリクエスト ヘッダー サイズの上限があることを示しています。 クラウドは 25 KB です。
仕様
Apigee Edge では、クライアント アプリケーションがファイルの一部としてサイズの大きなヘッダーを送信しないことを想定しています。
リクエストできます。合計サイズが指定の上限を超えるヘッダーがリクエストに含まれている場合、
Apigee は、次の RFC に従って 431 Request Header Fields Too Large
をスローします。
仕様:
仕様 |
---|
<ph type="x-smartling-placeholder"></ph> RFC 6585、セクション 5: 431 Request Header Fields Too Large |
Apigee サポートのサポートが必要な場合は、 診断情報の収集が必要な場合。
診断情報の収集が必要な場合
次の診断情報を収集して、Apigee Edge サポートに連絡してください。
Public Cloud ユーザーの場合は、次の情報を提供します。
- 組織名
- 環境名
- API プロキシ名
431
エラーの再現に使用する完全なcurl
コマンド- API リクエストのトレース ファイル
Private Cloud ユーザーの場合は、次の情報を提供します。
- 失敗したリクエストについて観測された完全なエラー メッセージ
- 組織名
- 環境名
- API プロキシ バンドル
- 失敗した API リクエストのトレース ファイル
431
エラーの再現に使用する完全なcurl
コマンドNGINX アクセスログ
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ここで、ORG、ENV、PORT# は、 使用します。
- Message Processor システムログ
/opt/apigee/var/log/edge-message-processor/logs/system.log