Sie lesen gerade die Apigee Edge -Dokumentation.
Zur
Apigee X -Dokumentation. info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 502 Bad Gateway mit dem Fehlercode protocol.http.ResponseWithBody als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 502 Bad Gateway
Außerdem kann eine der folgenden Fehlermeldungen angezeigt werden:
{
"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 lautet, aber den Antwort
text und/oder einen oder mehrere der folgenden Header enthält:
Content-LengthContent-EncodingTransfer-Encoding
Gemäß den Spezifikationen
RFC 7231, Abschnitt 6.3.5: 204 No Content und
RFC 7231, Abschnitt 6.3.6: 205 Reset Content, sollten vom Ursprungsserver keine zusätzlichen Inhalte
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 unter den folgenden Umständen den Statuscode 502 Bad Gateway mit dem Fehlercode protocol.http.ResponseWithBody an den Client zurück:
| Statuscode vom Backend-Server | ||
|---|---|---|
| Antwort vom Backend-Server enthält | 204 Kein Inhalt | 205 Inhalt zurücksetzen |
| Antworttext | FEHLER | FEHLER |
(auf einen Wert ungleich null festgelegt) |
FEHLER | FEHLER |
(auf eine unterstützte Codierung in Apigee Edge festgelegt) |
FEHLER | KEIN FEHLER |
Transfer-Encoding |
FEHLER | FEHLER |
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. |
Nutzer von Edge Public und Private Cloud |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools/Verfahren, um diesen Fehler zu diagnostizieren:
API-Monitoring
So diagnostizieren Sie den Fehler mit dem API-Monitoring:
- Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einer geeigneten Rolle an.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Rufen Sie die Seite Analysieren > API-Monitoring > Untersuchen auf.
- Wählen Sie den Zeitraum aus, in dem die Fehler aufgetreten sind.
- Stellen Sie Fehlercode im Verhältnis zu Zeit dar.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.ResponseWithBodyaus, wie unten gezeigt:
Die Informationen zum Fehlercode
protocol.http.ResponseWithBodywerden wie unten gezeigt angezeigt:
Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
- Notieren Sie sich im Fenster Logs die folgenden Details:
- Statuscode:
502 - Fehlerquelle:
target - Fehlercode:
protocol.http.ResponseWithBody.
- Statuscode:
- Wenn die Fehlerquelle den Wert
targetund der Fehlercode den Wertprotocol.http.ResponseWithBodyhat, ist der Fehler aufgetreten, weil der Backend-Server einen204 No Contentoder205 Reset ContentStatuscode mit dem Antworttext und/oder einem der im Abschnitt Mögliche Ursachen genannten Header gesendet hat.
Trace-Tool
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung
und führen Sie einen der folgenden Schritte aus:
- Warten Sie, bis der Fehler
502 Bad Gatewayauftritt. oder - Wenn Sie das Problem reproduzieren können, stellen Sie den API-Aufruf und reproduzieren Sie den
502 Bad GatewayFehler.
- Warten Sie, bis der Fehler
Achten Sie darauf, dass Alle FlowInfos einblenden aktiviert ist:
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
- Navigieren Sie durch die verschiedenen Phasen des Traces und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Normalerweise finden Sie den Fehler in der
flowinfoFehler direkt nach der Phase Anfrage an Zielserver gesendet , wie unten gezeigt:Szenario 1
Szenario 1: Der Backend-Server antwortet mit dem Statuscode
204 No Contentund enthält den Antworttext und/oder einen der im Abschnitt Mögliche Ursachen aufgeführten Header.
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 dem Statuscode
204 No Contentund enthält den Antworttext und/oder einen der im Abschnitt Mögliche Ursachen aufgeführten Header.
Notieren Sie sich die folgenden Werte aus dem Trace:
- Fehler:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- Fehler:
- Rufen Sie im Trace die Phase AX (Analysedaten aufgezeichnet) auf und klicken Sie darauf.
Scrollen Sie nach unten zum Abschnitt Phasendetails, Fehlerheader und ermitteln Sie die Werte von X-Apigee-fault-code und X-Apigee-fault-source , wie unten gezeigt:
- Die Werte von X-Apigee-fault-code und X-Apigee-fault-source
are protocol.http.ResponseWithBodybzw.target. Dies weist darauf hin, dass der Fehler aufgetreten ist, weil der Backend-Server einen204 No Contentoder205 Reset ContentStatuscode mit dem Antworttext und/oder einem der in Mögliche Ursachen genannten Header gesendet hat.Fehler Wert X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target
NGINX
So diagnostizieren Sie den Fehler mit NGINX-Zugriffsprotokollen:
- Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffsprotokolle verwenden, um die wichtigsten Informationen zu HTTP
502 Bad Gatewayzu ermitteln. Prüfen Sie die NGINX-Zugriffsprotokolle:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV, und PORT# durch tatsächliche Werte ersetzt.
- Suchen Sie nach
502-Fehlern mit dem Fehlercodeprotocol.http.ResponseWithBodyinnerhalb eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit502fehlschlagen. Wenn Sie
502-Fehler finden, bei denen der X-Apigee-fault-code mit dem Wertprotocol.http.ResponseWithBodyübereinstimmt, ermitteln Sie den Wert der X-Apigee-fault-source.Beispiel für einen 502-Fehler aus dem NGINX-Zugriffsprotokoll:
Der obige Beispiel-Eintrag aus dem NGINX-Zugriffsprotokoll hat die folgenden Werte für X- Apigee-fault-code und X-Apigee-fault-source:
Antwortheader Wert X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target- Die Werte von X-Apigee-fault-code und X-Apigee-fault-source
sind
protocol.http.ResponseWithBodybzw.target. Dies weist darauf hin, dass der Fehler aufgetreten ist, weil der Backend-Server einen204 No Contentoder205 Reset ContentStatuscode mit dem Antworttext und/oder einem der in Mögliche Ursachen genannten Header gesendet hat.
Ursache: Antworttext oder Header mit 204-Antwort vom Backend-Server
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe des API Monitorings, des Trace-Tools oder der NGINX-Zugriffsprotokolle, wie unter Allgemeine Diagnoseschritte erläutert.
- Wenn der Fehlercode
protocol.http.ResponseWithBodyist und Fehlerquelle den Werttargethat, hat der Backend-Server mit einem204 No Contentoder205 Reset ContentStatuscode mit dem Antworttext und/oder einem der im Abschnitt Mögliche Ursachen genannten Header geantwortet. So prüfen Sie, ob der Backend-Server tatsächlich einen Antwortnutzlasttext und/oder einen oder mehrere der im Abschnitt Mögliche Ursachen genannten Header gesendet hat:
Wenn Sie Public Cloud-Nutzer sind, können Sie dieselbe API-Anfrage direkt von einem Ihrer Systeme an den Backend-Server senden.
- Wenn Sie Private Cloud-Nutzer sind, können Sie dieselbe API-Anfrage direkt von einem der Nachrichtenverarbeiter, die der jeweiligen Organisation und Umgebung zugeordnet sind, in denen der Fehler aufgetreten ist, an den Backend-Server senden.
Prüfen Sie die vom Backend-Server empfangene Antwort und vergewissern Sie sich, dass sie einen Antwortnutzlasttext und/oder einen oder mehrere der oben genannten Header enthält. Wenn ja, ist dies die Ursache für diesen Fehler.
Beispiel 1
Beispiel 1: Backend-Serverantwort 204 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-aliveIn diesem Beispiel hat der Backend-Server mit
204 No ContentStatuscode undContent-Encoding: gzipgeantwortet.Beispiel 2
Beispiel 2: Backend-Serverantwort 204 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-aliveIn diesem Beispiel hat der Backend-Server mit
204 No ContentStatuscode undContent-Length: 48geantwortet.Beispiel 3
Beispiel 3: Backend-Serverantwort 205 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 ResponseIn diesem Beispiel hat der Backend-Server mit
205 Reset ContentStatuscode und AntworttextThis is a sample Response.geantwortet.- In allen oben genannten Beispielen hat der Backend-Server den Statuscode
204 No Contentoder205 Reset Contentmit dem Antworttext und/oder einem der im Abschnitt Mögliche Ursachen genannten Header gesendet. - Daher hat Apigee Edge den Statuscode
502 Bad Gatewaymit dem Fehlercodeprotocol.http.ResponseWithBodygesendet.
Auflösung
Achten Sie darauf, dass der Backend-Server beim Senden der 204 No Content
oder 205 Reset Content Antwort an Apigee Edge immer die Spezifikation
RFC 7231, Abschnitt 6.3.6: 205 Reset Content einhält. Das bedeutet, dass der Backend-Server
NICHT Folgendes als Teil einer 204 No Content oder
205 Reset Content-Antwort senden darf:
- Antwortnutzlasttext
- Und einer der folgenden Header:
Content-LengthContent-EncodingTransfer-Encoding
Spezifikation
Apigee Edge antwortet mit 502 Bad Gateway Statuscode und dem Fehlercode
protocol.http.ResponseWithBody wenn der Backend-Server eine
204 No Content oder 205 Reset Content Antwort sendet, aber
die folgenden RFC-Spezifikationen nicht einhält:
| Spezifikation |
|---|
| RFC 7231, Abschnitt 6.3.5: 204 No Content |
| RFC 7231, Abschnitt 6.3.6: 205 Reset Content |
Wichtige Hinweise
Die empfohlene Lösung besteht darin, den Backend-Server so zu konfigurieren, dass er den 204 No Content
und 205 Reset Content Statuscode ohne Antworttext und ohne die
Header - Content-Length, Content-Encoding, und
Transfer-Encoding sendet und die Spezifikationen
RFC 7231, Abschnitt 6.3.5: 204 No Content und
RFC 7231, Abschnitt 6.3.6: 205 Reset Content einhält.
Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, lesen Sie den Abschnitt Erfassen von Diagnoseinformationen erforderlich.
Erfassen von Diagnoseinformationen erforderlich
Erfassen Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:
Wenn Sie Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Name der Organisation
- Name der Umgebung
- Name des API-Proxys
- Vollständiger
curl-Befehl zum Reproduzieren des Fehlers502 - Trace-Datei für die API-Anfragen
Wenn Sie Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Trace-Datei für die API-Anfragen
NGINX-Zugriffsprotokolle
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV und PORT# durch tatsächliche Werte ersetzt.
- Message Processor-Systemprotokolle
/opt/apigee/var/log/edge-message-processor/logs/system.log