現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
内容
クライアント アプリケーションが、API 呼び出しのレスポンスとして、HTTP ステータス コード 414 Request-URI Too Long
とエラーコード 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)です。
考えられる原因
このエラーは、HTTP リクエストの一部としてクライアント アプリケーションから Apigee Edge に送信されたリクエスト行のサイズが、Apigee Edge で許容される上限を超えている場合に発生します。
このエラーの考えられる原因を確認する前に、リクエスト行の意味とサイズの確認方法を理解しましょう。
リクエスト行について
一般的な HTTP リクエストは、次の 3 つの部分で構成されます。
- Request-Line
- (HTTP ヘッダーのセット)
- [ 本文 ]
リクエスト行は、次に示すように 3 つの部分で構成されます。
Request-Line = <Method> <Request-URI> <HTTP-Version>
クライアント アプリケーションからサーバーに HTTP リクエストが行われると、サーバーに到達する最初の行に上記の Request-Line が含まれます。その後に、ヘッダーとリクエスト本文/ペイロードが続きます。
次のサンプル スクリーンショットは、一般的な curl
リクエスト、Request 部分(Request-Line を含む)、Response 部分を示しています。
Request-Line のサイズについて
- 上記の例では、リクエストの start 行(最初の行)(Request-Line とも呼ばれます)は次のようになります。
GET /test/ HTTP/1.1
Request-Line のサイズは、
19 ASCII characters
を含むため~19 bytes
です。これは Apigee Edge の上限の範囲内であるため、リクエストはエラーなしで処理され、正常なレスポンスが返されます。 - 同様に、上記の
エラー メッセージの
faultstring
には"request line size exceeding 7,168"
が含まれています。これは、クライアントから送信された HTTP リクエストの Request-Line が 7,168 バイトを超えたことを示します。
このエラーには、次のような原因が考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
リクエストのペイロード サイズが上限を超えています | クライアント アプリケーションによって Apigee Edge への HTTP リクエストの一部として送信される Request-URI のサイズが、Apigee Edge で許容される上限を超えている。 | Edge Public Cloud ユーザーと Private Cloud ユーザー |
共通の診断手順
このエラーを診断するには、次のいずれかのツールや手法を使用します。
API Monitoring
API Monitoring を使用してエラーを診断するには:
- 適切なロールを持つユーザーとして Apigee Edge UI にログインします。
問題を調査する組織に切り替えます。
- [Analyze] > [API Monitoring] > [Investigate] ページに移動します。
- エラーが発生した期間を選択します。
- [Time] に [Fault Code] をプロットします。
- 次のように、障害コード
protocol.http.TooBigLine
とステータス コード414
のセルを選択します。( 拡大画像を表示)
次のように、障害コード
protocol.http.TooBigline
に関する情報が表示されます。( 拡大画像を表示)
[ログを表示] をクリックし、失敗したリクエストの行を開きます。
( 拡大画像を表示)
[ログ] ウィンドウで、次の詳細をメモします。
- ステータス コード:
414
- 障害ソース:
apigee
- 障害コード:
protocol.http.TooBigLine
。 - リクエストの長さ(バイト):
7244 (> 7KB)
- ステータス コード:
- [Fault Source] の値が
apigee
またはMP
の場合、[Fault Code] の値はprotocol.http.TooBigLine
で、Request-Length は 7 KB を超えています。これは、クライアントからの HTTP リクエストのリクエスト URI が Apigee で許可されている上限より大きいことを示します。
Trace ツール
NGINX
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 が X-Apigee-fault-code の値と一致する
414
エラーが見つかった場合は、X-Apigee-fault-code の値を特定します。上記の 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 > 上限)
原因: リクエストのペイロード サイズが上限を超えています。
診断
- 一般的な診断手順で説明されているように、API Monitoring、Trace ツール、または NGINX アクセスログを使用して確認されたエラーの Fault Code、Fault Source、Request-Length size を特定します。
- [Fault Source] の値が
apigee
またはMP
の場合、クライアント アプリケーションから Apigee に送信されたリクエスト サイズが Apigee Edge で許容される上限を超えていることを示します。 - リクエストの行サイズが上限の 7 KB を超えていることを確認するには、次のいずれかの方法を使用します。
エラー メッセージ
エラー メッセージを使用して検証するには:
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstring
を参照してください。faultstring
は、Request-Line のサイズが上限の 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,000 個以上の ASCII 文字が含まれています。他のクライアントを使用している場合は、クライアント ログを確認して、Apigee Edge に送信されるリクエスト行のサイズを調べることができます。
Message Processor のログ
Message Processor のログを使用して検証するには:
Private Cloud ユーザーの場合は、Message Processor のログを使用して、Request-Line のサイズが 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
をスローし、414
ステータス コードと障害コードprotocol.http.TooBigline
をクライアント アプリケーションに返します。
解像度
サイズを修正
方法 1 [推奨]: リクエスト URI のサイズが上限を超えないようにクライアント アプリケーションを修正する
- 特定のクライアントが、上限で定義されている上限を超えるリクエスト URI サイズを送信する理由を分析します。
これが望ましくない場合は、リクエスト URI のサイズが許容される上限より小さいようにクライアント アプリケーションを修正します。
上記の例では、long クエリ パラメータをリクエスト URL の一部として渡すのではなく、次のようにリクエスト本文またはペイロードの一部として渡すことでこの問題を解決できます。
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- もし可能で、許容される上限を超える URI を送信する場合は、次のオプションに進みます。
CwC
方法 2 : CwC プロパティを使用してリクエスト行数の上限を引き上げる
Apigee には、リクエスト行サイズの上限を増やすことができる CwC プロパティが用意されています。詳細については、 Message Processor のリクエスト行数の上限を設定するをご覧ください。
上限
クライアント アプリケーションとバックエンド サーバーは、Apigee Edge の上限のリクエスト/レスポンス ラインの上限に記載されている許容上限より大きいリクエスト/レスポンス ラインを送信しないことを想定しています。
- Public Cloud ユーザーの場合、リクエスト / レスポンス行のサイズ上限は、Apigee Edge の上限のリクエスト / レスポンス ラインのサイズに記載されています。
- Private Cloud ユーザー の場合、リクエストとレスポンス行のサイズに関するデフォルトの上限を変更した可能性があります(推奨されませんが)。現在の上限を確認する方法の手順に沿って、Request-Line の最大サイズの上限を決定できます。
現在の上限を確認する方法
このセクションでは、Message Processor のプロパティ HTTPRequest.line.limit
が新しい値で更新されていることを確認する方法について説明します。
- Message Processor マシンで、
/opt/apigee/edge-message-processor/conf
ディレクトリでプロパティHTTPRequest.line.limit
を検索し、次のように設定されている値を確認します。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 Cloud で構成された Request-Line サイズの上限が 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