<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションは、次の HTTP ステータス コード 415 Unsupported Media Type を取得します。
エラーコード protocol.http.UnsupportedEncoding を返します。
エラー メッセージ
クライアント アプリケーションが次のレスポンス コードを受け取ります。
HTTP/1.1 415 Unsupported Media Type
また、次のようなエラー メッセージが表示される場合があります。
{
"fault":{
"faultstring":"Unsupported Encoding \"UTF-8\"",
"detail":{
"errorcode":"protocol.http.UnsupportedEncoding"
}
}
}考えられる原因
このエラーは、いずれかで指定された Content-Encoding ヘッダーの値が
クライアントから Apigee に送信された HTTP リクエスト、またはバックエンド サーバーから送信された HTTP レスポンス
Apigee には、
仕様に従って、Apigee がサポートしているエンコード
<ph type="x-smartling-placeholder"></ph>
RFC 7231、セクション 6.5.13: 415 Unsupported Media Type
このエラーには、次の原因が考えられます。
| 原因 | 説明 | トラブルシューティングの実施対象 |
|---|---|---|
| サポートされていないエンコードがリクエストで使用されている | リクエスト ヘッダー Content-Encoding にサポートされていないエンコードが含まれています
Apigee Edge です。 |
Edge Public Cloud ユーザーと Edge Private Cloud ユーザー |
| レスポンスでサポートされていないエンコードが使用されています | バックエンド サーバーのレスポンス ヘッダー Content-Encoding には、次のエンコードが含まれています。
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 アカウントにログインします。
問題を調査する組織に切り替えます。
- [Analyze] >API モニタリング >Investigate ページをご覧ください。
- エラーが発生した期間を選択します。
- [プロキシ] フィルタが [すべて] に設定されていることを確認します。
- 障害コードを Time に対してプロットします。
以下のように、障害コード
protocol.http.UnsupportedEncodingが含まれるセルを選択します。
障害コード
protocol.http.UnsupportedEncodingに関する情報が次のように表示されます。
[ログを表示 ] をクリックし、
415で失敗したリクエストのいずれかを開きます。 エラーが表示されます。
- [ログ] ウィンドウで、次の詳細をメモします。
<ph type="x-smartling-placeholder">
- </ph>
- Fault Source:
apigeeによってエラーが返されたことが示されます。 またはtarget。 - 障害コード: これは
protocol.http.UnsupportedEncodingと一致する必要があります。
- Fault Source:
- [Fault Source] が
apigeeの場合は、リクエストが サポートされていないエンコードがContent-Encodingヘッダーに含まれています。 - [Fault Source] が
targetの場合、バックエンド サーバーが サポートされていないエンコードがContent-Encodingヘッダーに含まれています。
Trace ツール
<ph type="x-smartling-placeholder">Trace ツールを使用してエラーを診断するには:
- を有効にする
トレース セッションと次のいずれかになります。
<ph type="x-smartling-placeholder">
- </ph>
415 Unsupported Media Typeエラーが発生するのを待つ。または- 問題を再現できる場合は、API 呼び出しを実行して問題を再現します。
415 Unsupported Media Typeエラー。
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したリクエストのいずれかを選択し、トレースを調べます。
- トレースのさまざまなフェーズを移動して、エラーが発生した場所を特定します。
このエラーは通常、Request sent to target の後のフローで発生します。 server フェーズで実行します。
トレースのエラーの値をメモします。
上記のサンプル トレースでは、エラーが
Unsupported Encoding "utf-8"と表示されます。以降 リクエストがバックエンド サーバーに送信された後に Apigee によってエラーが発生した場合、 バックエンド サーバーが値を含むレスポンス ヘッダーContent-Encodingを送信した"utf-8"は、 Apigee でサポートされているエンコードを確認します。- トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
[Phase Details] の [Error / Response Headers] セクションまで下にスクロールします。 決定し、 次のように、X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値。
X-Apigee-fault-code と X-Apigee-fault-source の値が次のように表示されます。
protocol.http.UnsupportedEncodingとtargetです。つまり、 このエラーは、サポートされていないエンコード値"utf-8"が レスポンス ヘッダーContent-Encodingでバックエンド サーバーを指定します。レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.UnsupportedEncodingX-Apigee-fault-source target- 以下については、
<ph type="x-smartling-placeholder"></ph>
プロキシ チェーンつまり、ターゲット サーバー/ターゲット エンドポイントが
Apigee でプロキシを使用します。
これを判断するには、[Request sent to target server] フェーズに戻ります。 [Show Curl] をクリックします。
- [Curl for Request Sent to Target Server] ウィンドウが開き、ここから次のことができます。 ターゲット サーバーのホスト エイリアスを指定します。
- ターゲット サーバーのホスト エイリアスが仮想ホストのエイリアスを指している場合、そのエイリアスはプロキシ
チェーン化します。この場合、次の時点まで、チェーンされたプロキシに対して上記のすべての手順を繰り返す必要があります。
415 Unsupported Media Typeエラーの原因を特定します。 - ターゲット サーバーのホスト エイリアスがバックエンド サーバーを指している場合、 バックエンド サーバーが、サポートされていないエンコードを Apigee に渡しています。
Nginix アクセスログ
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、
HTTP
415エラーに関する重要な情報。 NGINX アクセスログを確認します。
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- 特定の期間に
415エラーを検索します(問題が発生した場合)。 または415でまだ失敗しているリクエストがあるかどうか。 X-Apigee-fault-code が一致する
415エラーがある場合protocol.http.UnsupportedEncodingの値を求め、その値を求める X-Apigee-fault-source. のNGINX アクセスログの 415 エラーの例:
NGINX アクセスログの上記のサンプル エントリには、X- Apigee-fault-code と X-Apigee-fault-source:
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source MPX-Apigee-fault-source がX-Apigee-fault-source 値 X-Apigee-fault-source になっている場合もあります。
原因: リクエストでサポートされていないエンコード
診断
- API を使用して、観測されたエラーの障害コードと障害ソースを特定します。 Monitoring または NGINX アクセスログ(で説明) 一般的な診断手順をご覧ください。
- 障害コードが
protocol.http.UnsupportedEncodingで、障害 Source にapigeeまたはMPの値がある場合、 クライアント アプリケーションから送信されたリクエストのリクエスト ヘッダーに、サポートされていないエンコードが含まれていますContent-Encoding。 - HTTP リクエストの一部として渡される、サポートされていないエンコードの値を判別できる
次のいずれかの方法を使用します。
エラー メッセージ
エラー メッセージを使用する。 <ph type="x-smartling-placeholder">- </ph>
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstringに送信します。faultstringには、サポートされていない値が含まれています。 あります。エラー メッセージの例:
"faultstring":"Unsupported Encoding \"UTF-8\""
上記のエラー メッセージでは、サポートされていないエンコードの値が
faultstringに示す“UTF-8”。“UTF-8”は Apigee Edge でサポートされていないエンコードであるため、このリクエスト415 Unsupported Media Typeエラーで失敗し、次のエラーコードが表示されます。protocol.http.UnsupportedEncoding。
実際のリクエスト
実際のリクエストを使用する場合: <ph type="x-smartling-placeholder">- </ph>
- クライアント アプリケーションから行われた実際のリクエストにアクセスできない場合は、 解決策。
- クライアント アプリケーションから行われた実際のリクエストにアクセスできる場合は、
手順は次のとおりです。
<ph type="x-smartling-placeholder">
- </ph>
- リクエスト ヘッダー
Content-Encoding.に渡される値を確認します。 - リクエスト ヘッダー
Content-Encodingに渡された値が 1 でない場合 サポートされているエンコードに記載されている値であれば、 確認できます。リクエストの例:
curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz
上記のサンプル リクエストでは、値
"UTF-8"がContent- Encodingヘッダーに送信されます。これは Apigee Edge でサポートされているエンコードをご覧ください。したがって、このリクエストは415 Unsupported Media Typeエラーで失敗し、次のエラーコードが表示されます。protocol.http.UnsupportedEncoding。
- リクエスト ヘッダー
解決策
- Apigee でサポートされているエンコードのリストを、 サポートされているエンコード。
- クライアント アプリケーションが常に以下を送信するようにします。
<ph type="x-smartling-placeholder">
- </ph>
Content-Encodingヘッダーの値としてサポートされているエンコードのみ リクエスト- Apigee Edge へのサポートされている形式のリクエスト ペイロード。次の形式と一致します。
Content-Encodingヘッダーに指定
上記の例では、リクエスト ペイロードに
gz拡張子があります。 コンテンツはgzipである必要があります。この問題を解決するには、リクエスト ヘッダーを送信します。Content-Encoding: gzipとして指定し、リクエスト ペイロードをgzip形式にします。curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
原因: レスポンスのエンコードがサポートされていない
診断
- API を使用して、観測されたエラーの障害コードと障害ソースを特定します。 Monitoring、Trace Tool、または NGINX アクセスログ( 一般的な診断手順。
- [Fault Source] の値が
targetの場合は、 バックエンド サーバーから送信されたレスポンスに、サポートされていないエンコードが含まれています。Content-Encodingヘッダー。 - HTTP レスポンスの一部として渡される、サポートされていないエンコードの値は、
バックエンド サーバーと通信します。
エラー メッセージ
エラー メッセージを使用する。 <ph type="x-smartling-placeholder">- </ph>
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstringをご覧ください。faultstringには、次の値が含まれます。 サポートされていないエンコードです。エラー メッセージの例:
"faultstring":"Unsupported Encoding \"UTF-8\""
-
上記のエラー メッセージでは、サポートされていないエンコードの値が
faultstringに示す“UTF-8”。“UTF-8”は Apigee Edge でサポートされていないエンコードであるため、 リクエストが415 Unsupported Media Typeエラーで失敗し、次のエラーコードが表示されます。protocol.http.UnsupportedEncoding。
Trace ツール
Trace を使用する場合: <ph type="x-smartling-placeholder">
解決策
- Apigee でサポートされているエンコードのリストを、 サポートされているエンコード
- バックエンド サーバーが常に以下を送信するようにします。
<ph type="x-smartling-placeholder">
- </ph>
- サポートされているエンコードのみを
リクエストの
Content-Encodingヘッダー - Apigee Edge へのサポートされている形式のレスポンス ペイロード。次の形式と一致します。
Content-Encodingヘッダーに指定
- サポートされているエンコードのみを
リクエストの
サポートされているエンコード
次の表に、Apigee Edge でサポートされているエンコード形式を示します。
| ヘッダー | エンコード | 説明 |
|---|---|---|
Content-Encoding |
gzip |
Unix gzip 形式 |
deflate |
この形式は、deflate 圧縮アルゴリズムを使用した zlib 構造を使用します。 |
仕様
Apigee は、次に従い、415 Unsupported Media Type エラー レスポンスを返します。
RFC 仕様に沿ったものにします。
| 仕様 |
|---|
| <ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.13: 415 Unsupported Media Type |
主な注意点
次の点にご留意ください。
- サポートされていないエンコードが渡されたために Apigee から
415エラーが返される場合 API リクエストの一部としてContent-Encodingヘッダーがある場合、次のようになります。 <ph type="x-smartling-placeholder">- </ph>
- このようなリクエストのトレースをキャプチャすることはできません。
-
送信されたエラー レスポンスの形式や内容は変更できません RaiseFault、AssignMessage などのポリシーを使用する Apigee Edge。
これは、このエラーが Message Processor の早期段階で発生し、 ポリシーを実行できます。
- サポートされていないエンコードが渡されたために Apigee から
415エラーが返される場合 レスポンス ヘッダーに含まれていた場合は、修正が必要です。 バックエンド サーバーにリクエストを送信する必要があります。必要に応じてバックエンド チームと連携し、 この問題を修正します。
さらに Apigee Edge サポートのサポートが必要な場合は、 診断情報の収集が必要な場合をご覧ください。
診断情報の収集が必要な場合
Apigee サポートのサポートが必要な場合は、以下を収集します Apigee Edge サポートにお問い合わせください。
Public Cloud ユーザーの場合は、次の情報を提供します。
- 組織名
- 環境名
- API プロキシ名
415エラーの再現に使用する完全な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