502 Bad Gateway – DekomprimierungionFailureAtResponse

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Symptom

Die Clientanwendung ruft den HTTP-Statuscode 502 Bad Gateway mit Fehlercode ab messaging.adaptors.http.flow.DecompressionFailureAtResponse als Antwort auf die API Anrufe.

Fehlermeldung

Die Clientanwendung ruft den folgenden Antwortcode ab:

HTTP/1.1 502 Bad Gateway

Außerdem kann eine Fehlermeldung wie die folgende angezeigt werden:

{
   "fault":{
      "faultstring":"Decompression failure at response",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"
      }
   }
}

Mögliche Ursachen

Dieser Fehler tritt nur in folgenden Fällen auf:

  • Die im Header der HTTP-Antwort (vom Back-End/Zielserver) angegebene Codierung Content-Encoding ist gültig und <ph type="x-smartling-placeholder"></ph> unterstützt von Apigee Edge,
  • ABER

  • Das Nutzlastformat, das vom Back-End/Zielserver als Teil der HTTP-Antwort gesendet wird nicht Entspricht dem im Header Content-Encoding angegebenen Codierungsformat

Dies liegt daran, dass Apigee Edge die Nutzlast nicht mit der angegebenen Codierung decodieren kann, da die Format der Nutzlast nicht dasselbe Format wie die im Content-Encoding-Header.

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

Hier sind einige Beispiele für unterstützte Content-Encoding-Werte und wie Apigee Edge erwartet die Nutzlastdarstellung in diesen Fällen:

Szenario Content-Encoding Darstellung der Nutzlast
Einzelcodierung GZIP

Das Unix-gzip-Format.

Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> RFC 1952-GZIP-Format.

Einzelcodierung entschärfen

Dieses Format verwendet die zlib-Struktur mit dem deflate-Komprimierungsalgorithmus.

Weitere Informationen finden Sie unter . RFC1950 und <ph type="x-smartling-placeholder"></ph> RFC1951.

Mehrfachcodierung

Mehrfachcodierung

Wenn die Codierung zweimal ausgeführt wird, kann dies beispielsweise so aussehen:

  • gzip, deflate
  • gzip, gzip
  • deflate, gzip
  • deflate, deflate, deflate, deflate, deflate, deflate, deflate, deflate
Mehrfachcodierung auf die Nutzlast in der angegebenen Reihenfolge, wie sie im Header angezeigt wird.

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
<ph type="x-smartling-placeholder"></ph> Das Nutzlastformat der Antwort entspricht nicht dem Content-Encoding Das Format der vom Back-End/Zielserver gesendeten Antwortnutzlast ist entweder nicht codiert oder nicht müssen mit der Codierung übereinstimmen, die im Content-Encoding-Header angegeben ist. Edge-Nutzer von öffentlichen und privaten Clouds

Allgemeine Diagnoseschritte

Verwenden Sie eines der folgenden Tools oder Techniken, um diesen Fehler zu diagnostizieren:

API-Monitoring

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

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

  1. <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Achten Sie darauf, dass der Filter Proxy auf Alle gesetzt ist.
  6. Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.
  7. Wählen Sie eine Zelle mit dem Fehlercode messaging.adaptors.http.flow.DecompressionFailureAtResponse als (siehe unten):

    ( Größeres Bild ansehen)

  8. Informationen über den Fehlercode messaging.adaptors.http.flow.DecompressionFailureAtResponse wird so angezeigt:

    ( Größeres Bild ansehen)

  9. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile, in der die Fehlermeldung 502 angezeigt wird.

    ( Größeres Bild ansehen)

  10. Im Fenster Logs werden die folgenden Details angezeigt: <ph type="x-smartling-placeholder">
      </ph>
    • Statuscode: 502
    • Fehlerquelle: target
    • Fehlercode: messaging.adaptors.http.flow.DecompressionFailureAtResponse.
  11. Wenn die Fehlerquelle den Wert target hat, bedeutet dies, dass dass das Nutzlastformat der Antwort nicht mit dem <ph type="x-smartling-placeholder"></ph> unterstützte Codierung, die im Antwortheader des Backend-Servers angegeben ist Content-Encoding

Trace-Tool

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

So diagnostizieren Sie den Fehler mit dem Trace-Tool:

  1. Aktivieren Sie die Trace-Sitzung. und entweder: <ph type="x-smartling-placeholder">
      </ph>
    1. Warten Sie, bis der Fehler 502 Bad Gateway auftritt, oder
    2. Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus und reproduzieren Sie 502 Bad Gateway
  2. Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Antworten aus und prüfen Sie den Trace.
  4. Verschiedene Phasen des Trace durchgehen und ermitteln, wo der Fehler auftritt aufgetreten.
  5. Sie finden den Fehler in der Regel in einem Ablauf direkt nach der Phase Response Received from target server (Antwort vom Zielserver empfangen) wie unten dargestellt:

    ( Größeres Bild ansehen)

  6. Notieren Sie sich die Werte der Eigenschaften aus dem Trace:

    • Content-Encoding: gzip
    • Text für Antwortinhalt: {"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
  7. Direkt nach der Antwort vom Zielserver zur Fehlerphase wechseln Phase:

    ( Größeres Bild ansehen)

    Beachten Sie die Eigenschaften:

    • Fehler: Decompression failure at response
    • error.class::com.apigee.errors.http.server.BadGateway
    • error.cause: Not in GZIP format

      error.cause gibt an, dass die Antwortnutzlast nicht im GZIP-Format vorliegt. Dies bedeutet, dass Apigee Edge erwartet hat, dass die Antwortnutzlast im GZIP-Format als wurde im Content-Encoding-Header angegeben (im vorherigen Schritt Daher kann Apigee Edge die Nutzlast nicht mit gzip dekomprimieren und gibt den Fehlercode Fehler Decompression failure at response.

    Beachten Sie, dass die Antwort des Ziel-/Back-End-Servers 200 in diesem case; Die Clientanwendung erhält jedoch eine 502 da der Fehler von Apigee Edge zurückgegeben wird.

  8. Rufen Sie im Trace die Phase Antwort an Client gesendet auf und klicken Sie darauf.

    ( Größeres Bild ansehen)

    Achten Sie auf die folgenden Details aus dem Trace:

    • Status code: 502 Bad Gateway.
    • Fehlerinhalt: {"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
  9. Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded). und klicken Sie darauf.

  10. Scrollen Sie nach unten zum Abschnitt Phase Details, Error Headers und Bestimmen Sie die Werte von X-Apigee-fault-code und X-Apigee-fault-code. wie unten dargestellt:

    ( Größeres Bild ansehen)

  11. Sie sehen die Werte X-Apigee-fault-code und X-Apigee-fault-code. als messaging.adaptors.http.flow.DecompressionFailureAtResponse und target, was bedeutet, dass das Nutzlastformat der Antwort nicht mit dem Codierung angegeben, die im Content-Encoding-Header angegeben ist.
    Antwortheader Wert
    X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
    X-Apigee-fault-source target

NGINX

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

So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:

  1. Als Private Cloud-Nutzer können Sie NGINX-Zugriffslogs für folgende Zwecke verwenden: die wichtigsten Informationen zu HTTP-502-Fehlern ermitteln.
  2. Prüfen Sie die NGINX-Zugriffslogs:

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

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

  3. Suchen, um zu sehen, ob es während eines bestimmten Zeitraums 502 Fehler gibt (wenn das Problem in der Vergangenheit aufgetreten ist) oder wenn immer noch Antworten mit 502
  4. Wenn Sie 502-Fehler mit dem X-Apigee-fault-code finden entspricht dem Wert von messaging.adaptors.http.flow.DecompressionFailureAtResponse, Bestimmen Sie dann den Wert von X-Apigee-fault-source..

    Beispielfehler 502 aus dem NGINX-Zugriffsprotokoll:

    Der obige Beispieleintrag aus dem NGINX-Zugriffsprotokoll enthält die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-code

    Antwortheader Wert
    X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
    X-Apigee-fault-source target

Ursache: Antwortnutzlastformat stimmt nicht mit Content-Encoding überein.

Standardmäßig dekomprimiert Apigee Edge die Nutzlast, wenn der Antwortheader Content-Encoding enthält einen gültigen und einen <ph type="x-smartling-placeholder"></ph> unterstützte Codierung. Daher wird erwartet, dass das Format der Antwortnutzlast muss mit der Codierung übereinstimmen, die im Antwortheader Content-Encoding angegeben ist. Bei einer Abweichung wird dieser Fehler angezeigt.

Diagnose

  1. Ermitteln Sie den Fehlercode und die Fehlerquelle für den mit der API beobachteten Fehler. Monitoring-, Trace-Tool- oder NGINX-Zugriffslogs wie unter Häufige Diagnoseschritte.
  2. Wenn der Fehlercode messaging.adaptors.http.flow.DecompressionFailureAtResponse und die Fehlerquelle den Wert target hat, dann ist dies gibt an, dass das Format der vom Back-End/Zielserver gesendeten Antwortnutzlast nicht mit dem <ph type="x-smartling-placeholder"></ph> unterstützte Codierung im Antwortheader Content-Encoding.
  3. Sie können die Abweichung als Teil der HTTP-Antwort mit einer der folgenden Methoden ermitteln: Methoden:

    Fehlermeldung

    So führen Sie eine Validierung mithilfe der Fehlermeldung durch:

    1. Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, dann Weitere Informationen finden Sie im faultstring.

      Beispiel für eine Fehlermeldung:

      "faultstring":"Decompression failure at response"
      
    2. In der obigen Fehlermeldung wird "Decompression failure at response", was impliziert, dass die Antwort konnte nicht mit der in der angegebenen Codierung dekomprimiert werden. Content-Encoding-Header.

    Trace

    So validieren Sie mit Trace:

    1. Bestimmen Sie Content-Type und error.cause. mit Trace wie unter Häufige Diagnoseschritte erläutert.
    2. Die Werte aus dem Beispiel-Trace lauten wie folgt:

      • Content-Encoding: gzip
      • error.cause: Not in GZIP format

      Der Wert im Antwortheader Content-Encoding lautet gzip. Die Nutzlast der Antwort liegt jedoch nicht im GZIP-Format vor. (wie durch error.cause angegeben). Daher antwortet Apigee Edge mit 502 Bad Gateway und Fehlercode messaging.adaptors.http.flow.DecompressionFailureAtResponse.

    Tatsächliche Anfrage

    So validieren Sie die Anfrage anhand der tatsächlichen Anfrage:

    Wenn Sie Zugriff auf die eigentliche Anfrage an den Ziel-/Back-End-Server haben Anwendung und führen Sie dann die folgenden Schritte aus:

    1. Wenn Sie ein Nutzer einer öffentlichen Cloud/Private Cloud sind, stellen Sie eine Anfrage direkt zum Back-End-Server vom Back-End-Server selbst oder einem anderen Maschine, von der aus Sie die Anfrage an den Back-End-Server senden dürfen.
    2. Als Private Cloud-Nutzer können Sie die Anfrage auch stellen. von einem der Message Processor an den Backend-Server.
    3. Untersuchen Sie die vom Back-End-Server gesendete Antwort und bestimmen Sie den Wert. übergeben im Antwortheader Content-Encoding.
    4. Bestimmen Sie das Format der Nutzlast, die als Teil der Anfrage gesendet wird.
    5. Wenn der Wert des Headers Content-Encoding in der Liste der <ph type="x-smartling-placeholder"></ph> unterstützte Codierung, aber das Format der Antwortnutzlast stimmt nicht mit der im Content-Encoding-Header angegebenen Codierung überein, dann ist das die Ursache des Problems.

      Beispiel:

      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)>
      

      Mit der obigen Beispielantwort wird der Wert gzip an den Content-Encoding-Header, der eine <ph type="x-smartling-placeholder"></ph> unterstützte Codierung in Apigee Edge. Die response_payload.zip wird als ZIP-Datei gesendet. Daher ist dieser Antwort schlägt mit dem Fehler 502 Bad Gateway mit dem Fehlercode fehl: messaging.adaptors.http.flow.DecompressionFailureAtResponse.

    Message Processor-Logs

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

    So validieren Sie mit Message Processor-Logs:

    Wenn Sie ein Private Cloud-Nutzer sind, können Sie Message Processor-Logs verwenden. um die wichtigsten Informationen zu HTTP-502-Fehlern zu ermitteln.

    1. Überprüfen Sie das Message Processor-Protokoll:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Suchen Sie nach 502-Fehlern während eines bestimmten Dauer (wenn das Problem in der Vergangenheit aufgetreten ist) oder ob es Antworten schlagen immer noch mit 502 fehl. Sie können den folgenden Suchstring verwenden:

      grep -ri "ZipException"
      
    3. Zeilen aus system.log sehen in etwa so aus:

      Szenario 1

      Szenario 1: Wenn die API-Antwort den Header „Content-Encoding: gzip“ enthält

      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() : Exception
      java.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
      

      Die Zeile java.util.zip.ZipException: Not in GZIP format in der obigen Fehlermeldung gibt an, dass die Antwort wird nicht im GZIP-Format gesendet, obwohl die Content-Encoding als gzip angegeben. Daher wirft Apigee Edge die Ausnahme und gibt einen 502-Statuscode mit Fehlercode zurück messaging.adaptors.http.flow.DecompressionFailureAtResponse Client-Anwendungen.

      Szenario 2

      Szenario 2: Wenn die API-Antwort den Header „Content-Encoding: deflate“ enthält

      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
      
      

      Die Linien java.util.zip.ZipException: incorrect header check und Caused by: java.util.zip.DataFormatException: incorrect header check in der obigen Fehlermeldung darauf hinweisen, dass die Antwortnutzlast nicht im deflate-Format und entspricht nicht der im Content-Encoding-Header von deflate. Daher wird Apigee Edge löst die Ausnahme aus und gibt den Statuscode 502 mit Fehlercode messaging.adaptors.http.flow.DecompressionFailureAtResponse Client-Anwendungen.

Auflösung

  1. Wenn die komprimierte Antwortnutzlast im API-Proxy-Ablauf in Apigee Edge nicht benötigt wird und im Back-End-Server, dann übergeben Sie nicht den Header Content-Encoding. Wenn die Antwortnutzlast komprimiert werden muss, fahren Sie mit Schritt 2 fort.
  2. Wenn die Antwortnutzlast komprimiert werden muss, prüfen Sie, ob der Back-End-Server sendet immer Folgendes: <ph type="x-smartling-placeholder">
      </ph>
    • Alle <ph type="x-smartling-placeholder"></ph> unterstützte Codierung als Wert für den Content-Encoding-Header in der Antwort
    • Die Antwortnutzlast im unterstützten Format für Apigee Edge entspricht der Codierung Format, das im Content-Encoding-Header angegeben ist
  3. Im oben beschriebenen Beispiel liegt die Antwortnutzlast im ZIP-Format vor, aber der Antwortheader gibt Content-Encoding: gzip an. Sie können das Problem beheben, indem Sie die Antwort senden den Header als Content-Encoding: gzip und die Antwortnutzlast in gzip Format:
    curl -v https://HOSTALIAS/v1/test
    
    >
    < 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.gz Response Body(in GZIP format)>
    
    <ph type="x-smartling-placeholder">

Spezifikation

Apigee Edge antwortet mit dem Statuscode 502 Bad Gateway und dem Fehlercode messaging.adaptors.http.flow.DecompressionFailureAtResponse gemäß folgenden RFC Spezifikationen:

Spezifikation
<ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 6.5.1
<ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 3.1.2.2

Wenn Sie weitere Unterstützung vom Apigee-Support benötigen, rufen Sie auf. Diagnosedaten müssen erfasst werden.

Erfassen von Diagnoseinformationen erforderlich

Erfassen Sie die folgenden Diagnoseinformationen 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
  • Vollständiger curl-Befehl zum Reproduzieren des 502-Fehlers
  • Ablaufverfolgungsdatei für die API-Antworten

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

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

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

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