現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
内容
クライアント アプリケーションが、API 呼び出しへのレスポンスとして 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" } } }
考えられる原因
このエラーは、クライアントが Apigee に送信された HTTP リクエストまたはバックエンド サーバーから Apigee に送信された HTTP レスポンスで指定された Content-Encoding
ヘッダーの値に、仕様
RFC 7231、セクション 6.5.13: 415 Unsupported Media Type に従い、Apigee によってサポートされているエンコードが含まれていない場合に発生します。
このエラーには、次のような原因が考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
サポートされていないエンコードがリクエストで使用されている | リクエスト ヘッダー Content-Encoding に、Apigee Edge でサポートされていないエンコードが含まれています。 |
Edge Public Cloud ユーザーと Private Cloud ユーザー |
サポートされていないエンコードがレスポンスで使用されています | バックエンド サーバーのレスポンス ヘッダー Content-Encoding に、Apigee Edge でサポートされていないエンコードが含まれています。 |
Edge Public Cloud ユーザーと Private Cloud ユーザー |
共通の診断手順
エラーを診断するには、次のいずれかの方法を使用します。
API Monitoring
API Monitoring を使用してエラーを診断するには:
- Apigee Edge アカウントにログインします。
問題を調査する組織に切り替えます。
- [Analyze] > [API Monitoring] > [Investigate] ページに移動します。
- エラーが発生した期間を選択します。
- [プロキシ] フィルタが [すべて] に設定されていることを確認します。
- [Time] に [Fault Code] をプロットします。
以下に示すように、障害コード
protocol.http.UnsupportedEncoding
のセルを選択します。障害コード
protocol.http.UnsupportedEncoding
に関する情報が次のように表示されます。[ログを表示 ] をクリックし、
415
エラーで失敗したリクエストの 1 つを開いて、詳細を表示します。- [ログ] ウィンドウで、次の詳細をメモします。
- Fault Source:
apigee
またはtarget
によってエラーが返されたことが表示されます。 - 障害コード:
protocol.http.UnsupportedEncoding
と一致する必要があります。
- Fault Source:
- Fault Source が
apigee
の場合は、リクエストのContent-Encoding
ヘッダーにサポートされていないエンコードが含まれていることを示します。 - Fault Source が
target
の場合は、バックエンド サーバー レスポンスのContent-Encoding
ヘッダーにサポートされていないエンコードが含まれていたことを示します。
Trace ツール
Trace ツールを使用してエラーを診断するには:
-
トレース セッションを有効にして、次のいずれかを行います。
415 Unsupported Media Type
エラーが発生するまで待ちます。- 問題を再現できる場合は、API 呼び出しを行って
415 Unsupported Media Type
エラーを再現します。
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したリクエストの 1 つを選択し、トレースを調べます。
- トレースのさまざまなフェーズを順に確認し、エラーが発生した場所を見つけます。
このエラーは通常、以下に示すように「Request sent to target server」フェーズ後のフローで発生します。
トレースでのエラーの値をメモします。
上のサンプル トレースでは、エラーが
Unsupported Encoding "utf-8"
となっています。このエラーは、バックエンド サーバーにリクエストが送信された後に Apigee によって発生したため、バックエンド サーバーが"utf-8"
の値を含むレスポンス ヘッダーContent-Encoding
を送信したことを示します。これは、Apigee でサポートされているエンコードではありません。- トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
[Phase Details] パネルの [Error / Response Headers] セクションまで下にスクロールし、次のように X-Apigee-fault-code と X-Apigee-fault-source の値を確認します。
X-Apigee-fault-code と X-Apigee-fault-source の値が
protocol.http.UnsupportedEncoding
とtarget
として表示されます。これは、バックエンド サーバーによってレスポンス ヘッダーContent-Encoding
でサポートされていないエンコード値が渡されたことが原因で、このエラーが発生したことを示します。"utf-8"
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.UnsupportedEncoding
X-Apigee-fault-source target
-
プロキシ チェーンを使用しているかどうか、つまり、ターゲット サーバー/ターゲット エンドポイントが Apigee で別のプロキシを呼び出していないかどうかを確認します。
これを確認するには、[Request sent to target server] フェーズに戻ります。[Show Curl] をクリックします。
- [Curl for Request Sent to Target Server] ウィンドウが開き、ターゲット サーバーのホスト エイリアスを確認できます。
- ターゲット サーバーのホスト エイリアスが仮想ホスト エイリアスを指している場合、これはプロキシ チェーンです。この場合、実際に
415 Unsupported Media Type
エラーの原因を特定するまで、チェーンされたプロキシに対して上記の手順をすべて繰り返す必要があります。 - ターゲット サーバーのホスト エイリアスがバックエンド サーバーを参照している場合、これはバックエンド サーバーがサポートされていないエンコードを Apigee に渡していることを示します。
Nginix アクセスログ
NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、HTTP
415
エラーに関する重要な情報を特定できます。 NGINX のアクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 特定の期間に
415
エラーがないか検索します(問題が過去に発生した場合)。また、415
で失敗しているリクエストがあるかどうかを検索します。 X-Apigee-fault-code が
protocol.http.UnsupportedEncoding
の値と一致する415
エラーが見つかった場合は、X-Apigee-fault-code の値を確認します。NGINX のアクセスログの 415 エラーの例:
上記の NGINX アクセスログのエントリ例では、X-Apigee-fault-code と X-Apigee-fault-source に次の値が入っています。
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source MP
X-Apigee-fault-source の値が
target
の場合もあります。X-Apigee-fault-source X-Apigee-fault-source X-Apigee-fault-source
原因: リクエストでサポートされていないエンコード
診断
- 一般的な診断手順で説明されているように、API Monitoring または NGINX アクセスログを使用して確認されたエラーの障害コードと障害ソースを特定します。
- [Fault Code] が
protocol.http.UnsupportedEncoding
で、[Fault Source] の値がapigee
またはMP
の場合、クライアント アプリケーションから送信されたリクエストのリクエスト ヘッダーContent-Encoding
に、サポートされていないエンコードが含まれていることを示します。 - HTTP リクエストの一部として渡される、サポートされていないエンコードの値は、次のいずれかの方法で確認できます。
エラー メッセージ
該当するエラー メッセージの場合:Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstring
を参照してください。faultstring
には、サポートされていない終了コードの値が含まれます。エラー メッセージの例:
"faultstring":"Unsupported Encoding \"UTF-8\""
上記のエラー メッセージで、サポートされていないエンコードの値は
faultstring
にある“UTF-8”
です。“UTF-8”
は Apigee Edge でサポートされていないエンコードであるため、このリクエストは415 Unsupported Media Type
エラーで失敗します(エラーコード:protocol.http.UnsupportedEncoding
)。
実際のリクエスト
実際のリクエストを使用する場合:- クライアント アプリケーションから行われた実際のリクエストにアクセスできない場合は、解決策に進みます。
- クライアント アプリケーションによって行われた実際のリクエストにアクセスできる場合は、次の手順を行います。
- リクエスト ヘッダー
Content-Encoding.
に渡される値を確認します。 - リクエスト ヘッダー
Content-Encoding
に渡される値が、サポートされているエンコードに示されている値でない場合、それがこのエラーの原因です。リクエストの例:
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 でサポートされているエンコードのリストをご覧ください。
- クライアント アプリケーションが常に以下を送信することを確認します。
- リクエストの
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 レスポンスの一部として渡される、サポートされていないエンコードの値は、次のいずれかの方法で確認できます。
エラー メッセージ
該当するエラー メッセージの場合: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 の使用:
解像度
- サポートされているエンコードで、Apigee でサポートされているエンコードのリストをご覧ください。
- バックエンド サーバーが常に以下を送信することを確認します。
- リクエストの
Content-Encoding
ヘッダーの値として、サポートされているエンコードのみ - Apigee Edge に対してサポートされている形式で、
Content-Encoding
ヘッダーで指定された形式のレスポンス ペイロード
- リクエストの
サポートされているエンコード
次の表に、Apigee Edge でサポートされているエンコード形式を示します。
ヘッダー | エンコード | 説明 |
---|---|---|
Content-Encoding |
gzip |
Unix gzip 形式 |
deflate |
この形式では、zlib 構造とデフレート圧縮アルゴリズムを使用します。 |
仕様
Apigee は、次の RFC 仕様に従って 415 Unsupported Media Type
エラー レスポンスを返します。
仕様 |
---|
RFC 7231、section 6.5.13: 415 Unsupported Media Type |
重要なポイント
次の点に注意してください。
- API リクエストの一部として
Content-Encoding
ヘッダーでサポートされていないエンコードが渡されたため、Apigee から415
エラーが返された場合:- このようなリクエストのトレースはキャプチャできません。
-
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