415 サポートされていないメディアタイプ - サポートされていないエンコード

<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

<ph type="x-smartling-placeholder">

このエラーには、次の原因が考えられます。

原因 説明 トラブルシューティングの実施対象
サポートされていないエンコードがリクエストで使用されている リクエスト ヘッダー 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 を使用してエラーを診断するには:

  1. <ph type="x-smartling-placeholder"></ph> Apigee Edge アカウントにログインします
  2. 問題を調査する組織に切り替えます。

    UI 組織のプルダウン
  3. [Analyze] >API モニタリング >Investigate ページをご覧ください。
  4. エラーが発生した期間を選択します。
  5. [プロキシ] フィルタが [すべて] に設定されていることを確認します。
  6. 障害コードTime に対してプロットします。
  7. 以下のように、障害コード protocol.http.UnsupportedEncoding が含まれるセルを選択します。

    障害コードのセルを選択しました
  8. 障害コード protocol.http.UnsupportedEncoding に関する情報が次のように表示されます。

  9. [ログを表示 ] をクリックし、415 で失敗したリクエストのいずれかを開きます。 エラーが表示されます。

  10. [ログ] ウィンドウで、次の詳細をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • Fault Source: apigee によってエラーが返されたことが示されます。 または target
    • 障害コード: これは protocol.http.UnsupportedEncoding と一致する必要があります。
  11. [Fault Source] が apigee の場合は、リクエストが サポートされていないエンコードが Content-Encoding ヘッダーに含まれています。
  12. [Fault Source] が target の場合、バックエンド サーバーが サポートされていないエンコードが Content-Encoding ヘッダーに含まれています。

Trace ツール

<ph type="x-smartling-placeholder">

Trace ツールを使用してエラーを診断するには:

  1. を有効にする トレース セッションと次のいずれかになります。 <ph type="x-smartling-placeholder">
      </ph>
    • 415 Unsupported Media Type エラーが発生するのを待つ。または
    • 問題を再現できる場合は、API 呼び出しを実行して問題を再現します。 415 Unsupported Media Type エラー。
  2. [Show all FlowInfos] が有効になっていることを確認します。

    オプション ペインの表示、すべての flowinfos の表示
  3. 失敗したリクエストのいずれかを選択し、トレースを調べます。
  4. トレースのさまざまなフェーズを移動して、エラーが発生した場所を特定します。
  5. このエラーは通常、Request sent to target の後のフローで発生します。 server フェーズで実行します。

  6. トレースのエラーの値をメモします。

    上記のサンプル トレースでは、エラーが Unsupported Encoding "utf-8" と表示されます。以降 リクエストがバックエンド サーバーに送信された後に Apigee によってエラーが発生した場合、 バックエンド サーバーが値を含むレスポンス ヘッダー Content-Encoding を送信した "utf-8" は、 Apigee でサポートされているエンコードを確認します。

  7. トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
  8. [Phase Details] の [Error / Response Headers] セクションまで下にスクロールします。 決定し、 次のように、X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値。

  9. X-Apigee-fault-codeX-Apigee-fault-source の値が次のように表示されます。 protocol.http.UnsupportedEncodingtarget です。つまり、 このエラーは、サポートされていないエンコード値 "utf-8" が レスポンス ヘッダー Content-Encoding でバックエンド サーバーを指定します。

    レスポンス ヘッダー
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. 以下については、 <ph type="x-smartling-placeholder"></ph> プロキシ チェーンつまり、ターゲット サーバー/ターゲット エンドポイントが Apigee でプロキシを使用します。
    1. これを判断するには、[Request sent to target server] フェーズに戻ります。 [Show Curl] をクリックします。

    2. [Curl for Request Sent to Target Server] ウィンドウが開き、ここから次のことができます。 ターゲット サーバーのホスト エイリアスを指定します。
    3. ターゲット サーバーのホスト エイリアスが仮想ホストのエイリアスを指している場合、そのエイリアスはプロキシ チェーン化します。この場合、次の時点まで、チェーンされたプロキシに対して上記のすべての手順を繰り返す必要があります。 415 Unsupported Media Type エラーの原因を特定します。
    4. ターゲット サーバーのホスト エイリアスがバックエンド サーバーを指している場合、 バックエンド サーバーが、サポートされていないエンコードを Apigee に渡しています。

Nginix アクセスログ

<ph type="x-smartling-placeholder">

NGINX アクセスログを使用してエラーを診断するには:

  1. Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、 HTTP 415 エラーに関する重要な情報。
  2. NGINX アクセスログを確認します。

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    <ph type="x-smartling-placeholder">
  3. 特定の期間に 415 エラーを検索します(問題が発生した場合)。 または 415 でまだ失敗しているリクエストがあるかどうか。
  4. 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.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    X-Apigee-fault-source X-Apigee-fault-source X-Apigee-fault-source になっている場合もあります。

原因: リクエストでサポートされていないエンコード

診断

  1. API を使用して、観測されたエラーの障害コード障害ソースを特定します。 Monitoring または NGINX アクセスログ(で説明) 一般的な診断手順をご覧ください。
  2. 障害コードprotocol.http.UnsupportedEncoding で、障害 Sourceapigee または MP の値がある場合、 クライアント アプリケーションから送信されたリクエストのリクエスト ヘッダーに、サポートされていないエンコードが含まれています Content-Encoding
  3. HTTP リクエストの一部として渡される、サポートされていないエンコードの値を判別できる 次のいずれかの方法を使用します。

    エラー メッセージ

    エラー メッセージを使用する。 <ph type="x-smartling-placeholder">
      </ph>
    1. Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、 faultstring に送信します。faultstring には、サポートされていない値が含まれています。 あります。

      エラー メッセージの例:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. 上記のエラー メッセージでは、サポートされていないエンコードの値が faultstring に示す “UTF-8”

      “UTF-8” は Apigee Edge でサポートされていないエンコードであるため、このリクエスト 415 Unsupported Media Type エラーで失敗し、次のエラーコードが表示されます。 protocol.http.UnsupportedEncoding

    実際のリクエスト

    実際のリクエストを使用する場合: <ph type="x-smartling-placeholder">
      </ph>
    1. クライアント アプリケーションから行われた実際のリクエストにアクセスできない場合は、 解決策
    2. クライアント アプリケーションから行われた実際のリクエストにアクセスできる場合は、 手順は次のとおりです。 <ph type="x-smartling-placeholder">
        </ph>
      1. リクエスト ヘッダー Content-Encoding. に渡される値を確認します。
      2. リクエスト ヘッダー 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

解決策

  1. Apigee でサポートされているエンコードのリストを、 サポートされているエンコード
  2. クライアント アプリケーションが常に以下を送信するようにします。 <ph type="x-smartling-placeholder">
      </ph>
    • Content-Encoding ヘッダーの値としてサポートされているエンコードのみ リクエスト
    • Apigee Edge へのサポートされている形式のリクエスト ペイロード。次の形式と一致します。 Content-Encoding ヘッダーに指定
  3. 上記の例では、リクエスト ペイロードに gz 拡張子があります。 コンテンツは gzip である必要があります。この問題を解決するには、リクエスト ヘッダーを送信します。 Content-Encoding: gzip として指定し、リクエスト ペイロードを gzip 形式にします。

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

原因: レスポンスのエンコードがサポートされていない

診断

  1. API を使用して、観測されたエラーの障害コード障害ソースを特定します。 Monitoring、Trace Tool、または NGINX アクセスログ( 一般的な診断手順
  2. [Fault Source] の値が target の場合は、 バックエンド サーバーから送信されたレスポンスに、サポートされていないエンコードが含まれています。 Content-Encoding ヘッダー。
  3. HTTP レスポンスの一部として渡される、サポートされていないエンコードの値は、 バックエンド サーバーと通信します。

    エラー メッセージ

    エラー メッセージを使用する。 <ph type="x-smartling-placeholder">
      </ph>
    1. Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、 faultstring をご覧ください。faultstring には、次の値が含まれます。 サポートされていないエンコードです。

      エラー メッセージの例:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. 上記のエラー メッセージでは、サポートされていないエンコードの値が faultstring に示す “UTF-8”

      “UTF-8” は Apigee Edge でサポートされていないエンコードであるため、 リクエストが 415 Unsupported Media Type エラーで失敗し、次のエラーコードが表示されます。 protocol.http.UnsupportedEncoding

    Trace ツール

    Trace を使用する場合: <ph type="x-smartling-placeholder">
      </ph>
    1. 失敗したリクエストのトレースがない場合は、 解決策
    2. 障害のトレースをキャプチャした場合は、サポートされていない Content-Encoding レスポンスの一部としてバックエンド サーバーから渡されたエンコード Trace ツールで説明されているとおりに指定します。

解決策

  1. Apigee でサポートされているエンコードのリストを、 サポートされているエンコード
  2. バックエンド サーバーが常に以下を送信するようにします。 <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

    ここでORGENVPORT# は、 使用します。

  • Message Processor システムログ /opt/apigee/var/log/edge-message- processor/logs/system.log