415 Nicht unterstützter Medientyp – nicht unterstützte Codierung

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Symptom

Die Clientanwendung erhält als Antwort auf API-Aufrufe den HTTP-Statuscode 415 Unsupported Media Type mit dem Fehlercode protocol.http.UnsupportedEncoding .

Fehlermeldung

Die Clientanwendung ruft den folgenden Antwortcode ab:

HTTP/1.1 415 Unsupported Media Type

Außerdem wird möglicherweise eine Fehlermeldung wie die folgende angezeigt:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

Mögliche Ursachen

Dieser Fehler tritt auf, wenn der Wert des Headers Content-Encoding, der entweder in der vom Client an Apigee gesendeten HTTP-Anfrage oder der HTTP-Antwort, die vom Back-End-Server an Apigee gesendet wird, nicht die von Apigee unterstützte Codierung gemäß der Spezifikation RFC 7231, Abschnitt 6.5.13: 415 Nicht unterstützter Medientyp enthält.

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Nicht unterstützte Codierung in der Anfrage Der Anfrageheader Content-Encoding enthält eine Codierung, die von Apigee Edge nicht unterstützt wird. Nutzer von Edge Public und Private Cloud
Nicht unterstützte Codierung in der Antwort Der Antwortheader Content-Encoding des Back-End-Servers enthält eine Codierung, die von Apigee Edge nicht unterstützt wird. Nutzer von Edge Public und Private Cloud

Allgemeine Diagnoseschritte

Zur Diagnose des Fehlers können Sie eine der folgenden Methoden verwenden:

API-Monitoring

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

  1. Melden Sie sich bei Ihrem Apigee Edge-Konto an.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten:

    Drop-down-Menü für UI-Organisation
  3. Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Achten Sie darauf, dass der Filter Proxy auf Alle festgelegt ist.
  6. Stellen Sie den Fehlercode der Zeit gegenüber.
  7. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.UnsupportedEncoding aus, wie unten dargestellt:

    Fehlercodezelle ausgewählt
  8. Informationen zum Fehlercode protocol.http.UnsupportedEncoding werden wie unten dargestellt angezeigt:

  9. Klicken Sie auf Logs ansehen und maximieren Sie eine der Anfragen, die mit dem Fehler 415 fehlschlagen, um weitere Informationen zu sehen:

  10. Notieren Sie sich im Fenster Logs die folgenden Details:
    • Fehlerquelle: Zeigt an, dass der Fehler von apigee oder target zurückgegeben wird.
    • Fehlercode: Muss mit protocol.http.UnsupportedEncoding übereinstimmen.
  11. Wenn die Fehlerquelle apigee ist, weist dies darauf hin, dass die Anfrage eine nicht unterstützte Codierung im Content-Encoding-Header enthielt.
  12. Wenn die Fehlerquelle target ist, weist dies darauf hin, dass die Antwort des Back-End-Servers eine nicht unterstützte Codierung im Content-Encoding-Header enthielt.

Trace-Tool

So diagnostizieren Sie den Fehler mit dem Trace-Tool:

  1. Aktivieren Sie die Trace-Sitzung und entweder:
    • Warten Sie, bis der Fehler 415 Unsupported Media Type auftritt, oder
    • Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um den Fehler 415 Unsupported Media Type zu reproduzieren.
  2. Achten Sie darauf, dass Show all FlowInfos aktiviert ist:

    Ansichtsoptionen, alle Flussinformationen anzeigen
  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
  5. Der Fehler tritt normalerweise in einem Ablauf nach der Phase Anfrage an Zielserver gesendet auf, wie unten dargestellt:

  6. Notieren Sie sich den Wert des Fehlers aus dem Trace.

    Das obige Beispiel-Trace zeigt den Fehler als Unsupported Encoding "utf-8". Da der Fehler von Apigee ausgelöst wird, nachdem die Anfrage an den Back-End-Server gesendet wurde, weist er darauf hin, dass der Back-End-Server den Antwortheader Content-Encoding mit dem Wert "utf-8" gesendet hat. Dies ist keine unterstützte Codierung in Apigee.

  7. Gehen Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
  8. Scrollen Sie nach unten zum Abschnitt Error / Response Headers (Fehler-/Antwortheader) im Bereich Phase Details (Phasendetails) und ermitteln Sie die Werte von X-Apigee-fail-code und X-Apigee-fail-source, wie unten dargestellt:

  9. Die Werte von X-Apigee-fault-code und X-Apigee-fault-code werden als protocol.http.UnsupportedEncoding und target angezeigt. Dies weist darauf hin, dass dieser Fehler verursacht wird, weil der nicht unterstützte Codierungswert "utf-8" vom Back-End-Server im Antwortheader Content-Encoding übergeben wurde.

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Prüfen Sie, ob Sie Proxy-Verkettung verwenden, d. h., ob der Zielserver/Zielendpunkt einen anderen Proxy in Apigee aufruft.
    1. Um dies zu ermitteln, kehren Sie zur Phase An Zielserver gesendete Anfrage zurück. Klicken Sie auf Curl anzeigen.

    2. Das Fenster Curl for Request Sent to Target Server (Curl für an Zielserver gesendete Anfrage) wird geöffnet, in dem Sie den Alias des Zielserver-Hosts bestimmen können.
    3. Wenn der Hostalias des Zielservers auf einen virtuellen Hostalias verweist, handelt es sich um eine Proxyverkettung. In diesem Fall müssen Sie alle oben genannten Schritte für den verketteten Proxy wiederholen, bis Sie feststellen, was den Fehler 415 Unsupported Media Type tatsächlich verursacht.
    4. Wenn der Hostalias des Zielservers auf Ihren Back-End-Server verweist, bedeutet dies, dass Ihr Back-End-Server die nicht unterstützte Codierung an Apigee weitergibt.

Nginix-Zugriffslogs

So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:

  1. Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-415-Fehlern ermitteln.
  2. Prüfen Sie die NGINX-Zugriffslogs:

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

  3. Suchen Sie nach 415-Fehlern innerhalb eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) oder ob es Anfragen mit 415 gibt, die immer noch fehlschlagen.
  4. Wenn Sie 415-Fehler mit dem X-Apigee-fault-code finden, der mit dem Wert von protocol.http.UnsupportedEncoding übereinstimmt, bestimmen Sie den Wert von X-Apigee-fault-code .

    Beispiel 415-Fehler aus dem NGINX-Zugriffslog:

    Der obige Beispieleintrag aus dem NGINX-Zugriffslog enthält die folgenden Werte für X- Apigee-Fehler-Code und X-Apigee-Fehler-Quelle:

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    X-Apigee-fault-source könnte auch denX-Apigee-fault-source Wert X-Apigee-fault-source haben.

Ursache: Nicht unterstützte Codierung in der Anfrage

Diagnose

  1. Bestimmen Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API-Monitoring oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn der Fehlercode protocol.http.UnsupportedEncoding lautet und die Fehlerquelle den Wert apigee oder MP hat, weist dies darauf hin, dass die von der Clientanwendung gesendete Anfrage eine nicht unterstützte Codierung im Anfrageheader Content-Encoding enthält.
  3. Du kannst den Wert der nicht unterstützten Codierung, die als Teil der HTTP-Anfrage übergeben wird, mit einer der folgenden Methoden ermitteln:

    Fehlermeldung

    Über die Fehlermeldung:
    1. Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, lesen Sie die faultstring. faultstring enthält den Wert der nicht unterstützten Endcodierung.

      Beispiel für eine Fehlermeldung:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Beachten Sie in der obigen Fehlermeldung, dass der Wert der nicht unterstützten Codierung “UTF-8” ist, wie in faultstring zu sehen.

      Da “UTF-8” keine unterstützte Codierung in Apigee Edge ist, schlägt diese Anfrage mit dem Fehler 415 Unsupported Media Type und dem Fehlercode protocol.http.UnsupportedEncoding fehl.

    Tatsächliche Anfrage

    Tatsächliche Anfrage verwenden:
    1. Wenn Sie keinen Zugriff auf die eigentliche Anfrage der Clientanwendung haben, wechseln Sie zu Lösung.
    2. Wenn Sie Zugriff auf die eigentliche Anfrage der Clientanwendung haben, führen Sie die folgenden Schritte aus:
      1. Ermitteln Sie den Wert, der an den Anfrageheader Content-Encoding. übergeben wird.
      2. Wenn der an den Anfrageheader Content-Encoding übergebene Wert keiner der unter Unterstützte Codierung aufgeführten Werte ist, ist das die Ursache für diesen Fehler.

        Beispielanfrage:

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

        Die obige Beispielanfrage sendet den Wert "UTF-8" an den Header Content- Encoding, was keine unterstützte Codierung in Apigee Edge ist. Daher schlägt diese Anfrage mit dem Fehler 415 Unsupported Media Type und dem Fehlercode fehl: protocol.http.UnsupportedEncoding.

Auflösung

  1. Eine Liste der von Apigee unterstützten Codierungen finden Sie unter Unterstützte Codierung.
  2. Achten Sie darauf, dass die Clientanwendung immer Folgendes sendet:
    • Nur die unterstützte Codierung als Wert für den Content-Encoding-Header in der Anfrage
    • Die Nutzlast der Anfrage an Apigee Edge im unterstützten Format und entspricht dem im Content-Encoding-Header angegebenen Format
  3. Im obigen Beispiel hat die Nutzlast der Anfrage eine gz-Erweiterung, die angibt, dass der Inhalt gzip sein muss. Sie können das Problem beheben, indem Sie den Anfrageheader als Content-Encoding: gzip und die Anfragenutzlast im Format gzip senden:

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

Ursache: Nicht unterstützte Codierung in der Antwort

Diagnose

  1. Bestimmen Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn die Fehlerquelle den Wert target hat, weist dies darauf hin, dass die vom Back-End-Server gesendete Antwort eine nicht unterstützte Codierung im Content-Encoding-Header enthält.
  3. Sie können den Wert der nicht unterstützten Codierung als Teil der HTTP-Antwort vom Back-End-Server mit einer der folgenden Methoden ermitteln:

    Fehlermeldung

    Über die Fehlermeldung:
    1. Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, lesen Sie die faultstring. faultstring enthält den Wert der nicht unterstützten Codierung.

      Beispiel für eine Fehlermeldung:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Beachten Sie in der obigen Fehlermeldung, dass der Wert der nicht unterstützten Codierung “UTF-8” ist, wie in faultstring zu sehen.

      Da “UTF-8” in Apigee Edge keine unterstützte Codierung ist, schlägt diese Anfrage mit dem Fehler 415 Unsupported Media Type und dem Fehlercode protocol.http.UnsupportedEncoding fehl.

    Trace-Tool

    Trace verwenden:
    1. Wenn Sie das Trace für die fehlgeschlagene Anfrage nicht haben, wechseln Sie zu Lösung.
    2. Wenn Sie ein Trace für den Fehler erfasst haben, können Sie die nicht unterstützte Codierung ermitteln, die vom Back-End-Server als Teil des Antwortheaders Content-Encoding übergeben wird, wie unter Trace-Tool erläutert.

Auflösung

  1. Eine Liste der von Apigee unterstützten Codierungen finden Sie unter Unterstützte Codierung.
  2. Achten Sie darauf, dass der Back-End-Server immer Folgendes sendet:
    • Nur die unterstützte Codierung als Wert für den Content-Encoding-Header in der Anfrage
    • Die Antwortnutzlast im unterstützten Format an Apigee Edge und entspricht dem im Content-Encoding-Header angegebenen Format

Unterstützte Codierung

In der folgenden Tabelle ist das von Apigee Edge unterstützte Codierungsformat aufgeführt:

Header Codierung Beschreibung
Content-Encoding gzip Das Unix-Format gzip
deflate Dieses Format verwendet die zlib-Struktur mit Deflate-Komprimierungsalgorithmus.

Spezifikation

Apigee antwortet mit der Fehlerantwort 415 Unsupported Media Type gemäß der folgenden RFC-Spezifikation:

Spezifikation
RFC 7231, Abschnitt 6.5.13: 415 Nicht unterstützter Medientyp

Wichtige Hinweise

Wichtige Hinweise:

  • Wenn der Fehler 415 von Apigee aufgrund einer nicht unterstützten Codierung im Content-Encoding-Header als Teil der API-Anfrage zurückgegeben wird, dann:
    • Sie können den Trace für solche Anfragen nicht erfassen.
    • Sie können das Format oder den Inhalt der Fehlerantwort, die von Apigee Edge gesendet wurde, nicht mit Richtlinien wie IncreaseFault oderAssignMessage ändern.

    Das liegt daran, dass dieser Fehler in einem frühen Stadium im Message Processor auftritt, bevor eine Richtlinie ausgeführt werden kann.

  • Wenn der Fehler 415 von Apigee aufgrund einer nicht unterstützten Codierung im Antwortheader Ihres Back-End-Servers zurückgegeben wird, muss dies auf dem Back-End-Server behoben werden, um diesen Fehler zu vermeiden. Wenden Sie sich gegebenenfalls an Ihr Back-End-Team, um dieses Problem zu beheben.

Wenn Sie weiterhin Unterstützung vom Apigee Edge-Support benötigen, lesen Sie den Hilfeartikel Diagnoseinformationen müssen erfasst werden.

Erfassen von Diagnoseinformationen erforderlich

Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, stellen Sie die folgenden Diagnoseinformationen zusammen und wenden Sie sich an den Apigee Edge-Support:

Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Name
  • Führen Sie den Befehl curl aus, mit dem der Fehler 415 reproduziert wurde
  • Ablaufverfolgungsdatei für die API-Anfragen

Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
  • Name der Umgebung
  • API-Proxy-Bundle
  • Ablaufverfolgungsdatei für die API-Anfragen
  • NGINX-Zugriffslogs /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Hierbei gilt: ORG, ENV und PORT# werden durch tatsächliche Werte ersetzt.

  • Systemprotokolle von Message Processor /opt/apigee/var/log/edge-message- processor/logs/system.log