„502 Bad Gateway“ – ResponseWithBody

<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 dem Fehler ab Code protocol.http.ResponseWithBody als Antwort für API-Aufrufe.

Fehlermeldung

Die Clientanwendung ruft den folgenden Antwortcode ab:

HTTP/1.1 502 Bad Gateway

Außerdem sehen Sie möglicherweise eine der folgenden Fehlermeldungen:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

Mögliche Ursachen

Dieser Fehler tritt auf, wenn die HTTP-Antwort vom Backend-Server an Apigee Edge entweder 204 No Content oder 205 Reset Content, enthält aber die response body und/oder mindestens einen der folgenden Header:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

Gemäß den Spezifikationen <ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 6.3.5: 204 No Content und <ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 6.3.6: 205 Reset Content, wird erwartet, dass keine zusätzlichen Inhalte sollte vom Ursprungsserver als Teil des Antwortnutzlasttexts mit dem Statuscode 204 No Content oder 205 Reset Content gesendet werden. Die Antwortheader wie Content-Length, Content-Encoding oder Transfer-Encoding geben die Größe, den Typ oder das Format der Antwortnutzlast an.

Daher gibt Apigee Edge einen 502 Bad Gateway-Statuscode mit dem Client den Fehlercode protocol.http.ResponseWithBody unter Gegebenheiten:

Statuscode vom Backend-Server
Antwort vom Backend-Server enthält 204 Kein Inhalt 205 Inhalte zurücksetzen
Antworttext FEHLER FEHLER

Content-Length-Header

(auf ungleich null gesetzt)

FEHLER FEHLER

Content-Encoding

(Festlegen auf <ph type="x-smartling-placeholder"></ph> unterstützte Codierung in Apigee Edge)

FEHLER KEIN FEHLER
Transfer-Encoding FEHLER FEHLER
<ph type="x-smartling-placeholder">

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Antworttext oder Header mit 204-Antwort vom Backend-Server Der Backend-Server sendet eine 204 No Content oder 205 Reset Content Antwort mit einem Antworttext und/oder einem oder mehreren der Header Content-Type, Content-Encoding oder Transfer-Encoding. 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. Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein. <ph type="x-smartling-placeholder">
  6. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.ResponseWithBody als (siehe unten):

    ( Größeres Bild ansehen)

  7. Sie sehen die Informationen zum Fehlercode protocol.http.ResponseWithBody, wie unten gezeigt:

    ( Größeres Bild ansehen)

  8. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.

    ( Größeres Bild ansehen)

  9. Im Fenster Logs werden die folgenden Details angezeigt: <ph type="x-smartling-placeholder">
      </ph>
    • Statuscode: 502
    • Fehlerquelle: target
    • Fehlercode: protocol.http.ResponseWithBody.
  10. Wenn die Fehlerquelle den Wert target und den Fehler Code den Wert protocol.http.ResponseWithBody hat, dann gibt an, dass der Fehler aufgetreten ist, weil der Back-End-Server eine Statuscode 204 No Content oder 205 Reset Content mit den Antworttext und/oder einen der Header, die im Mögliche Ursachen.

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 den Fehler 502 Bad Gateway.
  2. Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Verschiedene Phasen des Trace durchgehen und ermitteln, wo der Fehler auftritt aufgetreten.
  5. In der Regel sind Fehler in der flowinfo-Fehler nach der Phase Anfrage an Zielserver gesendet an:

    Szenario 1

    Szenario 1: Der Backend-Server antwortet mit dem Statuscode 204 No Content mit dem Antworttext und/oder einem der in der Tabelle Mögliche Ursachen:

    Notieren Sie sich die folgenden Werte aus dem Trace:

    • Fehler: Received 204 Response with message body
    • error.class::com.apigee.rest.framework.BadGateway

    Szenario 2

    Szenario 2: Der Backend-Server antwortet mit einem Statuscode 204 No Content mit dem Antworttext und/oder einem der Header, die unter Mögliche Ursachen aufgeführt sind.

    Notieren Sie sich die folgenden Werte aus dem Trace:

    • Fehler: Received 205 Response with message body
    • error.class::com.apigee.rest.framework.BadGateway
  6. Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded). und klicken Sie darauf.
  7. 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)

  8. Beachten Sie, dass die Werte von X-Apigee-fault-code und X-Apigee-fault-code are protocol.http.ResponseWithBody bzw. target. Dies weist darauf hin, dass der Fehler aufgetreten ist, weil der Backend-Server eine 204 No Content- oder 205 Reset Content-Statuscode durch den Antworttext und/oder einer der Header, die unter Mögliche Ursachen aufgeführt sind.
    Fehler Wert
    X-Apigee-fault-code protocol.http.ResponseWithBody
    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 Bad Gateway 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. Nach 502-Fehlern mit Fehlercode suchen protocol.http.ResponseWithBody während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) oder wenn immer noch Anfragen mit 502
  4. Wenn Sie 502-Fehler mit dem X-Apigee-fault-code finden dem Wert von protocol.http.ResponseWithBody entsprechen, dann ermitteln 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-Fehlercode und X-Apigee-Fehler-Quelle:

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. Beachten Sie, dass die Werte von X-Apigee-fault-code und X-Apigee-fault-code sind protocol.http.ResponseWithBody bzw. target. Dies weist darauf hin, dass der Fehler aufgetreten ist, weil der Backend-Server eine 204 No Content- oder 205 Reset Content-Statuscode durch den Antworttext und/oder einer der Header, die unter Mögliche Ursachen aufgeführt sind.

Ursache: Antworttext oder Header mit 204-Antwort vom Backend-Server

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 protocol.http.ResponseWithBody ist und Fehlerquelle den Wert target hat, bedeutet dies, dass das Back-End Der Server hat mit dem Status 204 No Content oder 205 Reset Content geantwortet. mit dem Antworttext und/oder einem der Header in Mögliche Ursachen:
  3. Um zu überprüfen, ob der Back-End-Server tatsächlich einen Antwortnutzlasttext und/oder einen Antwortnutzlasttext gesendet hat. oder mehreren der unter Mögliche Ursachen genannten Überschriften, können Sie führen Sie die folgenden Schritte aus:

    1. Wenn Sie Nutzer einer öffentlichen Cloud sind und dieselbe API-Anfrage an den Back-End-Server direkt von einem Ihrer Systeme.

      <ph type="x-smartling-placeholder">
    2. Wenn Sie ein Private Cloud-Nutzer sind, können Sie dieselbe API-Anfrage an den Back-End-Server direkt von einem der Message Processor aus, die dem spezifischen Organisation und Umgebung, in der der Fehler beobachtet wird.
    3. Prüfen Sie die vom Back-End-Server erhaltene Antwort und vergewissern Sie sich, dass sie einen Nutzlasttext der Antwort und/oder mindestens einen der oben genannten Header. Wenn ja, ist das die Ursache des Fehlers.

      Beispiel 1

      Beispiel 1: Antwort 204 des Backend-Servers mit Content-Encoding-Header

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      In diesem Beispiel hat der Back-End-Server mit 204 No Content-Statuscode und Content-Encoding: gzip

      Beispiel 2

      Beispiel 2: Antwort 204 des Backend-Servers mit Content-Length-Header

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      In diesem Beispiel hat der Back-End-Server mit 204 No Content-Statuscode und Content-Length: 48

      Beispiel 3

      Beispiel 3: Antwort 205 des Back-End-Servers mit Antworttext

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      In diesem Beispiel hat der Back-End-Server mit 205 Reset Content-Statuscode mit Antworttext This is a sample Response.

    4. In allen obigen Beispielen hat der Back-End-Server 204 No Content oder Statuscode 205 Reset Content mit dem Antworttext und/oder einem der Header die unter Mögliche Ursachen aufgeführt sind.
    5. Daher hat Apigee Edge den Statuscode 502 Bad Gateway mit Fehlercode gesendet protocol.http.ResponseWithBody.

Auflösung

Sicherstellen, dass der Backend-Server immer die Spezifikation einhält <ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 6.3.6: 205 Reset Content beim Senden der 204 No Content oder 205 Reset Content-Antwort auf Apigee Edge. Das heißt, der Back-End-Server Folgendes DARF NICHT als Teil eines 204 No Content- oder Antwort von 205 Reset Content:

  1. Antwortnutzlasttext
  2. und einer der folgenden Überschriften: <ph type="x-smartling-placeholder">
      </ph>
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

Spezifikation

Apigee Edge antwortet mit dem Statuscode 502 Bad Gateway und dem Fehlercode protocol.http.ResponseWithBody, wenn der Backend-Server eine Antwort „204 No Content“ oder „205 Reset Content“, aber nicht den folgenden RFC-Spezifikationen entspricht:

Spezifikation
<ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 6.3.5: 204 No Content
<ph type="x-smartling-placeholder"></ph> RFC 7231, Abschnitt 6.3.6: 205 Content zurücksetzen

Wichtige Punkte

Die empfohlene Lösung besteht darin, den Backend-Server so zu reparieren, dass er 204 No Content sendet und den Statuscode 205 Reset Content ohne Antworttext und Header: Content-Length, Content-Encoding und Transfer-Encoding und den Spezifikationen entsprechen . RFC 7231, Abschnitt 6.3.5: 204 No Content und RFC 7231, Abschnitt 6.3.6: 205 Reset Content.

Wenn Sie weitere Unterstützung vom Apigee-Support benötigen, gehen Sie zu Diagnoseinformationen 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 API-Anfragen

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

  • Vollständige Fehlermeldung für fehlgeschlagene Anfragen
  • Name der Umgebung
  • API-Proxy-Bundle
  • Ablaufverfolgungsdatei für API-Anfragen
  • 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