<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションは、次の HTTP ステータス コード 414 Request-URI Too Long
を取得します。
API 呼び出しのレスポンスとしてエラーコード protocol.http.TooBigLine
が返されます。
エラー メッセージ
クライアント アプリケーションが次のレスポンス コードを受け取ります。
HTTP/1.1 414 Request-URI Too Long
また、次のエラー メッセージが表示される場合があります。
{ "fault":{ "faultstring":"request line size exceeding 7,168", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
上記のエラー メッセージの faultstring
に、許可される上限が含まれています。
Apigee Edge のリクエスト行は 7168 bytes
(7 KB)です。
考えられる原因
このエラーは、クライアント アプリケーションから Apigee Edge に送信されたリクエスト ラインのサイズが原因で発生します。 HTTP リクエストの一部として含まれている値が、Apigee Edge で許可されている上限を超えています。
このエラーの考えられる原因を確認する前に、リクエスト行が何であるかを理解しておきましょう。 サイズの確認方法を説明します。
リクエスト行について
一般的な HTTP リクエストは、次の 3 つの部分で構成されます。
- <ph type="x-smartling-placeholder"></ph> リクエスト行
- ( HTTP ヘッダーのセット)
- [本文 ]
リクエスト行は、次に示すように 3 つの部分で構成されます。
Request-Line = <Method> <Request-URI> <HTTP-Version>
クライアント アプリケーションからサーバーに対して HTTP リクエストが送信されると、最初の行は サーバーには上記の Request-Line が含まれています。その後に リクエスト本文/ペイロードの 3 つです
次のサンプル スクリーンショットは、一般的な curl
リクエストであるリクエストを示しています。
(Request-Line とともに)と Response パートがあります。
リクエスト ラインのサイズについて
- 上記のサンプルでは、リクエストの start 行(最初の行)も、
リクエスト行と呼ばれるすべての行を以下に示します。
GET /test/ HTTP/1.1
リクエスト行のサイズは、次を含むため
~19 bytes
です。19 ASCII characters
。これは 内にあるため、 場合、リクエストはエラーなしで処理されます。 成功のレスポンスが返されます - 同様に、の
faultstring
を見てみると、 上のエラー メッセージには"request line size exceeding 7,168"
が含まれています。 これは、クライアントが行った HTTP リクエストの Request-Line が超過したことを示します。 7,168 バイト。
このエラーには、次の原因が考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
リクエストのペイロード サイズが上限を超えている | HTTP の一部としてクライアント アプリケーションが送信するリクエスト URI のサイズ。 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.TooBigLine
であるセルを選択し、 次のようにステータス コード414
を指定します。( 拡大画像を表示)
障害コード
protocol.http.TooBigline
に関する情報が表示されます。 次のように指定します。( 拡大画像を表示)
[ログを表示] をクリックし、失敗したリクエストの行を開きます。
( 拡大画像を表示)
[ログ] ウィンドウで、次の詳細をメモします。
- ステータス コード:
414
- 障害の発生元:
apigee
- 障害コード:
protocol.http.TooBigLine
- リクエストの長さ(バイト):
7244 (> 7KB)
- ステータス コード:
- [Fault Source] の値が
apigee
またはMP
の場合、 障害コードの値はprotocol.http.TooBigLine
です。 Request-Length が 7 KB を超えている場合、これは HTTP リクエストが の値のリクエスト URI が、 Apigee で許容される上限。
Trace ツール
<ph type="x-smartling-placeholder">NGINX
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーは、NGINX アクセスログを使用して次のことを行えます。
HTTP
414
エラーに関する重要な情報を確認する。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ここで、 ORG、ENV、PORT# は実際の値に置き換えられます。
- 特定の期間に
414
エラーがないか検索して確認できます (過去に発生した場合)か、引き続き失敗するリクエストがあるかどうかを414
。 X-Apigee-fault-code で
414
エラーが見つかった場合 (protocol.http.TooBigLine
の値と一致するもの)を求め、 X-Apigee-fault-source. の値。NGINX アクセスログの上記のサンプル エントリには、次の値が含まれます。 X-Apigee-fault-code と X-Apigee-fault-code
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source policy
リクエストの長さに注意:
7244
(7.244 KB > 上限)
原因: リクエストのペイロード サイズが上限を超えている
診断
- [Fault Code]、[Fault Source]、[Request-Length size] の値を決定します。 API Monitoring、Trace Tool、または NGINX Access のログを使用して確認されたエラー 一般的な診断手順。
- [Fault Source] の値が
apigee
またはMP
の場合、 は、クライアント アプリケーションから Apigee に送信されたリクエスト サイズが Apigee Edge で許可されている上限。 - 次のいずれかを使用して、リクエスト行のサイズが上限の 7 KB を超えていることを確認できます。
次のメソッドを使用します。
エラー メッセージ
エラー メッセージを使用して検証するには:
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstring
をご覧ください。faultstring
は、 リクエスト ラインのサイズが上限の 7 KB を超えています。エラー メッセージの例:
"faultstring":"request line size exceeding 7,168"
実際のリクエスト
実際のリクエストを使用して検証するには:
クライアント アプリケーションから行われた実際のリクエストにアクセスできる場合は、 次の操作を行います。
- リクエストで渡された URI のサイズを確認します。
URI のサイズが Apigee Edge で許可されている上限を超えている場合、 問題の原因を特定します。
リクエストの例:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
上記の場合、クエリ パラメータの値
qparam
7 KB を超える(7 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
- 特定の期間に
414
エラーがないか検索する 問題が発生したか、問題が発生したか まだ414
で失敗しています。次の検索文字列を使用できます。grep -ri "exceeding"
grep -ri "RequestURITooLong"
system.log
から次のような行が表示されます。2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
テキスト
message = request line size exceeding 7,168
上記のエラー メッセージは、リクエスト URI のサイズが 7 KB を超えていることを示しています。 そのため、Apigee Edge は例外をスローします。com.apigee.errors.http.user.RequestURITooLong
、返品可能 障害コードprotocol.http.TooBigline
とともに414
ステータス コードをクライアント アプリケーションに送信します。
解決策
<ph type="x-smartling-placeholder">
サイズを修正
方法 1 [推奨]: 許可された上限を超えるサイズのリクエスト URI を送信しないようにクライアント アプリケーションを修正する
<ph type="x-smartling-placeholder">- 特定のクライアントがサイズを超えるリクエスト URI サイズを送信する理由を分析します。 制限で定義されているとおり、許容されます。
これが望ましくない場合は、リクエスト URI を送信するようにクライアント アプリケーションを修正します。 サイズを小さくしてください。
上記の例では、長いクエリを渡して問題を解決できます。 パラメータとして渡すのではなく、リクエスト本文またはペイロードの一部として リクエスト URL を示しています。
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- 許容される上限を超える URI を送信することが望ましい場合は、 説明します。
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.line.limit
に以下が設定されていることを確認する方法について説明します。
Message Processor 上の新しい値で更新されました。
- Message Processor マシンで、次のプロパティを検索します。
HTTPRequest.line.limit
(/opt/apigee/edge-message-processor/conf
ディレクトリを作成し、 次のように設定されている値を確認します。grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- 上記のコマンドのサンプル結果は次のとおりです。
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
上記の出力例では、プロパティ
HTTPRequest.line.limit
がhttp.properties
の値7k
に設定されています。これは、Apigee for Private で構成されたリクエスト ライン サイズの上限を示しています。 クラウドは 7 KB です。
Apigee サポートのサポートが必要な場合は、 診断情報の収集が必要な場合。
診断情報の収集が必要な場合
次の診断情報を収集して、Apigee Edge サポートに連絡してください。
Public Cloud ユーザーの場合は、次の情報を提供します。
- 組織名
- 環境名
- API プロキシ名
414
エラーの再現に使用する完全なcurl
コマンド- API リクエストのトレース ファイル
Private Cloud ユーザーの場合は、次の情報を提供します。
- 失敗したリクエストについて観測された完全なエラー メッセージ
- 組織名
- 環境名
- API プロキシ バンドル
- 失敗した API リクエストのトレース ファイル
414
エラーの再現に使用する完全な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