<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションが HTTP ステータス コードと 502 Bad Gateway
エラーコードを取得する
API へのレスポンスとしての messaging.adaptors.http.flow.DecompressionFailureAtResponse
できます。
エラー メッセージ
クライアント アプリケーションが次のレスポンス コードを受け取ります。
HTTP/1.1 502 Bad Gateway
また、次のようなエラー メッセージが表示される場合があります。
{ "fault":{ "faultstring":"Decompression failure at response", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse" } } }
考えられる原因
このエラーは、次の場合にのみ発生します。
- HTTP レスポンス(バックエンド/ターゲット サーバーからの)ヘッダーで指定されたエンコード
Content-Encoding
は有効で、 <ph type="x-smartling-placeholder"></ph> Apigee Edge でサポートされている - バックエンド/ターゲット サーバーによって HTTP レスポンスの一部として送信されるペイロード形式
含まれない
Content-Encoding
ヘッダーで指定されたエンコード形式と一致している
ただし
これは Apigee Edge が、指定されたエンコードを使用してペイロードをデコードできないためです。これは、
ペイロードの形式が、
Content-Encoding
ヘッダー。
サポートされている Content-Encoding
値の例と Apigee Edge が、
では、次の場合にペイロード表現が期待されます。
シナリオ | Content-Encoding | ペイロードの表現 |
---|---|---|
単一エンコード | gzip | Unix 詳しくは、 <ph type="x-smartling-placeholder"></ph> RFC1952 GZIP 形式。 |
単一エンコード | Deflate | この形式は、deflate 圧縮アルゴリズムを使用した <ph type="x-smartling-placeholder"></ph>をご覧ください。
RFC1950 および
<ph type="x-smartling-placeholder"></ph>
RFC1951 |
複数のエンコード | 複数のエンコード たとえば、エンコードが 2 回行われる場合は、次のようになります。
|
ヘッダーに記述されている順序に従って、ペイロードに複数のエンコードが適用されます。 |
このエラーには、次の原因が考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
<ph type="x-smartling-placeholder"></ph> レスポンスのペイロード形式が Content-Encoding と一致しない | バックエンド/ターゲット サーバーによって送信されるレスポンス ペイロードの形式は、
エンコードされていないか、
Content-Encoding ヘッダーで指定されたエンコードと一致している。 |
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 に対してプロットします。
障害コード
messaging.adaptors.http.flow.DecompressionFailureAtResponse
を持つセルを選択します。 下に示します。( 拡大画像を表示)
障害コードに関する情報
messaging.adaptors.http.flow.DecompressionFailureAtResponse
は次のように表示されます。( 拡大画像を表示)
[ログを表示] をクリックし、
502
エラーで失敗した行を開きます。( 拡大画像を表示)
- [ログ] ウィンドウで、次の詳細をメモします。
<ph type="x-smartling-placeholder">
- </ph>
- ステータス コード:
502
- 障害の発生元:
target
- 障害コード:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
- ステータス コード:
- [Fault Source] の値が
target
の場合、 レスポンスのペイロード形式が <ph type="x-smartling-placeholder"></ph> バックエンド サーバーのレスポンス ヘッダーに指定された、サポートされているエンコード方式Content-Encoding
。
Trace ツール
<ph type="x-smartling-placeholder">Trace ツールを使用してエラーを診断するには:
- トレース セッションを有効にする
および次のいずれかです。
<ph type="x-smartling-placeholder">
- </ph>
502 Bad Gateway
エラーが発生するのを待つ。または- 問題を再現できる場合は、API 呼び出しを行い、
502 Bad Gateway
。
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したレスポンスの 1 つを選択し、トレースを調べます。
- トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
通常、エラーは [Response Received from target server] フェーズを以下に示します。
( 拡大画像を表示)
-
トレースのプロパティの値をメモします。
- Content-Encoding:
gzip
- レスポンス コンテンツの本文:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Content-Encoding:
[Response Received from target server] の直後のエラーフェーズに移動する フェーズ:
( 拡大画像を表示)
次のプロパティに注意してください。
- エラー:
Decompression failure at response
- error.class:
com.apigee.errors.http.server.BadGateway
error.cause:
Not in GZIP format
error.cause は、レスポンスのペイロードが GZIP 形式ではないことを示しています。 つまり、Apigee Edge はレスポンスのペイロードが
Content-Encoding
ヘッダーで指定されていた(以前の したがって、Apigee Edge は gzip を使用してペイロードを解凍できず、 エラーDecompression failure at response
。
この例では、ターゲット/バックエンド サーバーからのレスポンスは
200
です。 ただし、クライアント アプリケーションは502
Apigee Edge によってエラーが返されるためです。- エラー:
トレースの [Response Sent to Client] フェーズに移動してクリックします。
( 拡大画像を表示)
トレースの次の詳細に注意してください。
- ステータス コード:
502 Bad Gateway
。 - エラーの内容:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- ステータス コード:
トレースの AXAX(Analytics Data Recorded)フェーズに移動します。 クリックします。
- [Phase Details]、[Error Headers] セクションまで下にスクロールし、
X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値を確認します。
次のように指定します。
( 拡大画像を表示)
- X-Apigee-fault-code と X-Apigee-fault-source の値が表示されます。
messaging.adaptors.http.flow.DecompressionFailureAtResponse
として、およびtarget
は、レスポンスのペイロード形式がContent-Encoding
ヘッダーで指定されたエンコード。レスポンス ヘッダー 値 X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
NGINX
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーは、NGINX アクセスログを使用して次のことを行えます。
HTTP
502
エラーに関する重要な情報を確認する。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ここで、 ORG、ENV、PORT# は実際の値に置き換えられます。
- 特定の期間に
502
エラーがないか検索して確認できます (過去に発生した問題の場合)、または引き続き失敗するレスポンス502
。 X-Apigee-fault-code で
502
エラーが見つかった場合 値messaging.adaptors.http.flow.DecompressionFailureAtResponse
と一致し、 次に、X-Apigee-fault-source. の値を確認します。NGINX アクセスログの 502 エラーの例:
NGINX アクセスログの上記のサンプル エントリには、次の値が含まれます。 X-Apigee-fault-code と X-Apigee-fault-code
レスポンス ヘッダー 値 X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
原因: レスポンスのペイロード形式が Content-Encoding と一致しない
デフォルトでは、Apigee Edge は、レスポンス ヘッダーに
Content-Encoding
には、有効なフィールドと
<ph type="x-smartling-placeholder"></ph>
エンコード方式をご覧ください。そのため、レスポンス ペイロードの形式は
レスポンス ヘッダー Content-Encoding
で指定されたエンコードと一致する必要があります。
不一致がある場合は、このエラーが発生します。
診断
- API を使用して、観測されたエラーの障害コードと障害ソースを特定します。 Monitoring、Trace ツール、または NGINX アクセスログを 一般的な診断手順。
- 障害コードが
messaging.adaptors.http.flow.DecompressionFailureAtResponse
および [Fault Source] の値がtarget
の場合、 バックエンド/ターゲット サーバーによって送信されたレスポンス ペイロードの形式が、 <ph type="x-smartling-placeholder"></ph> レスポンス ヘッダーContent-Encoding
に指定されたサポートされているエンコード。 次のいずれかの方法で、HTTP レスポンスの一部として不一致を判断できます。 メソッド:
エラー メッセージ
エラー メッセージを使用して検証するには:
-
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstring
をご覧ください。エラー メッセージの例:
"faultstring":"Decompression failure at response"
- 上記のエラー メッセージでは、
"Decompression failure at response"
: レスポンスを意味します。 指定されたエンコードで圧縮解除できませんでした。Content-Encoding
ヘッダー。
トレース
Trace を使用して検証するには:
- Content-Type と error.cause を特定します。 (Trace を使用) 一般的な診断手順で説明されているとおりに処理されます。
サンプル トレースの値は次のとおりです。
- Content-Encoding:
gzip
- error.cause:
Not in GZIP format
レスポンス ヘッダー Content-Encoding の値は gzip です。 ただし、レスポンスのペイロードが GZIP 形式でない (error.cause で示されます)。したがって、Apigee Edge は
502 Bad Gateway
とエラーコードmessaging.adaptors.http.flow.DecompressionFailureAtResponse
。- Content-Encoding:
実際のリクエスト
実際のリクエストを使用して検証するには:
ターゲット/バックエンド サーバーに対する実際のリクエストにアクセスできる場合 次の手順を実施します
- Public Cloud/Private Cloud ユーザーの場合は、リクエストを行います。 バックエンド サーバー自体や任意の外部 IP アドレスから、 バックエンド サーバーへのリクエストを実行できる場所からマシンを自動起動できます。
- Private Cloud ユーザーは、Cloud VPN の API からのリクエストを いずれかの Message Processor からバックエンド サーバーへ送信されます。
- バックエンド サーバーから送信されたレスポンスを調べて、値を特定する
レスポンス ヘッダー
Content-Encoding.
で渡されます。 - リクエストの一部として送信されるペイロードの形式を特定します。
Content-Encoding
ヘッダーの値が次のリストにある場合: <ph type="x-smartling-placeholder"></ph> サポートされているエンコードですが、レスポンス ペイロードの形式はContent-Encoding
ヘッダーで指定されたエンコードと一致しない場合 それが問題の原因です例:
curl -v https://HOSTALIAS/test
***trimmed*** > < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.zip Response Body(not in GZIP format)>上記のサンプル レスポンスでは、値
gzip
がContent-Encoding
ヘッダーは、 <ph type="x-smartling-placeholder"></ph> サポートされているエンコードをご確認ください。ただし、response_payload.zip
は ZIP ファイルとして送信されます。したがって、この レスポンスが失敗し、502 Bad Gateway
エラーと次のエラーコードが返されます。messaging.adaptors.http.flow.DecompressionFailureAtResponse
。
Message Processor のログ
<ph type="x-smartling-placeholder">Message Processor ログを使用して検証するには:
Private Cloud ユーザーは、Message Processor のログを使用できます。 HTTP
502
エラーに関する重要な情報を確認します。Message Processor のログを確認します。
/opt/apigee/var/log/edge-message-processor/logs/system.log
特定の期間に
502
エラーがないか検索する 時間(過去に問題がある場合)、またはレスポンスがある場合 まだ502
で失敗しています。次の検索文字列を使用できます。grep -ri "ZipException"
system.log に次のような行が含まれています。
シナリオ #1
シナリオ #1: API レスポンスにヘッダー Content-Encoding: gzip がある場合
2021-08-02 06:50:25,433 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0 bytesWritten=203 age=469ms lastIO=0ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: Not in GZIP format
---trimmed-- 2021-08-02 06:50:25,433 NIOThread@2 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:50:25,434 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format) 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exceptionjava.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP format上記のエラー メッセージの
java.util.zip.ZipException: Not in GZIP format
行は、レスポンスが ペイロードは GZIP 形式で送信されませんが、Content-Encoding
gzip として指定されます。Apigee Edge は例外をスローし、502
ステータス コードと障害コードを返すmessaging.adaptors.http.flow.DecompressionFailureAtResponse
クライアントアプリケーションに提供しますシナリオ #2
シナリオ #2: API レスポンスにヘッダー Content-Encoding: deflate がある場合
2021-08-02 06:35:21,215 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0 bytesWritten=202 age=439ms lastIO=2ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
---trimmed---- Caused by:java.util.zip.DataFormatException: incorrect header check
---trimmed--- 2021-08-02 06:35:21,215 NIOThread@0 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:35:21,216 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277, incorrect header check) 2021-08-02 06:35:21,216 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.util.zip.ZipException: incorrect header check occurred while writing to channel null 2021-08-02 06:35:21,217 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: incorrect header check行
java.util.zip.ZipException: incorrect header check
およびCaused by: java.util.zip.DataFormatException: incorrect header check
上記のエラー メッセージを見ると、レスポンスのペイロードが deflate 形式であり、 deflate のContent-Encoding
ヘッダー。Apigee Edge は 例外がスローされ、次を含む502
ステータス コードが返されます。 障害コードmessaging.adaptors.http.flow.DecompressionFailureAtResponse
クライアントアプリケーションに提供します
-
解決策
- Apigee Edge の API プロキシフローで圧縮レスポンス ペイロードが必要ない場合
バックエンド サーバーでは、ヘッダー
Content-Encoding
を渡さないでください。 レスポンス ペイロードを圧縮する必要がある場合は、ステップ 2 に進みます。 - レスポンスのペイロードを圧縮する必要がある場合は、バックエンド サーバーが
常に以下が送信されます。
<ph type="x-smartling-placeholder">
- </ph>
- 次のいずれか
<ph type="x-smartling-placeholder"></ph>
サポートされているエンコードを
Content-Encoding
ヘッダーの値として 回答 - Apigee Edge へのサポートされている形式のレスポンス ペイロードがエンコードと一致している
Content-Encoding
ヘッダーで指定された形式
- 次のいずれか
<ph type="x-smartling-placeholder"></ph>
サポートされているエンコードを
- 上記の例では、レスポンスのペイロードは ZIP 形式ですが、レスポンス ヘッダーは
Content-Encoding: gzip
を指定します。レスポンスを送信すると、この問題を解決できます。 ヘッダーをContent-Encoding: gzip
として指定し、レスポンス ペイロードをgzip
に含めます。 形式:curl -v https://HOSTALIAS/v1/test
> < HTTP/1.1 200 OK < Accept-Ranges: bytes <
<ph type="x-smartling-placeholder">Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.gz Response Body(in GZIP format)>
仕様
Apigee Edge は、ステータス コード 502 Bad Gateway
とエラーコードを返します。
次の RFC に基づく messaging.adaptors.http.flow.DecompressionFailureAtResponse
仕様:
仕様 |
---|
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.1 |
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 3.1.2.2 |
Apigee サポートのサポートが必要な場合は、にアクセスしてください。 診断情報の収集が必要な場合。
診断情報の収集が必要な場合
次の診断情報を収集して、Apigee Edge サポートに連絡してください。
Public Cloud ユーザーの場合は、次の情報を提供します。
- 組織名
- 環境名
- API プロキシ名
502
エラーの再現に使用する完全なcurl
コマンド- API レスポンスのトレース ファイル
Private Cloud ユーザーの場合は、次の情報を提供します。
- 失敗したレスポンスについて観測された完全なエラー メッセージ
- 環境名
- API プロキシ バンドル
- API レスポンスのトレース ファイル
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