Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 502 Bad Gateway mit dem Fehlercode protocol.http.Response405WithoutAllowHeader als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
HTTP/1.1 502 Bad Gateway
Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}Mögliche Ursachen
Dieser Fehler tritt auf, wenn der Backend-Server mit 405 Method Not Allowed Status
code ohne den Allow Header antwortet.
Gemäß der Spezifikation
RFC 7231, Abschnitt 6.5.5: 405 Method Not Allowed muss der Ursprungsserver
in einer 405-Antwort ein Allow-Headerfeld mit einer
Liste der derzeit unterstützten Methoden der Zielressource generieren und senden. Andernfalls antwortet Apigee mit
502 Bad Gateway und dem Fehlercode protocol.http.Response405WithoutAllowHeader.
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
|---|---|---|
| 405-Antwort ohne „Allow“-Header vom Backend-Server | Der Backend-Server, der die API-Anfrage verarbeitet, antwortet mit dem Statuscode 405 ohne den Header Allow. |
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 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.Response405WithoutAllowHeaderaus, wie unten gezeigt:
Informationen zum Fehlercode
protocol.http.Response405WithoutAllowHeaderwerden wie unten gezeigt angezeigt:
Klicken Sie auf Logs ansehen und maximieren Sie eine der fehlgeschlagenen Anfragen, um weitere Informationen aufzurufen.
- Notieren Sie sich im Fenster Logs die folgenden Details:
- Statuscode:
502 - Fehlerquelle:
target - Fehlercode:
protocol.http.Response405WithoutAllowHeader.
- Statuscode:
- Wenn die Fehlerquelle
targetund der Fehlercodeprotocol.http.Response405WithoutAllowHeaderist, hat der Backend-Server mit dem Statuscode405 Method Not Allowedohne den HeaderAllowgeantwortet.
Trace-Tool
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die
Trace-Sitzung und entweder
- warten Sie, bis der Fehler
502 Bad Gatewayauftritt, oder - wenn Sie das Problem reproduzieren können, stellen Sie den API-Aufruf, um den Fehler
502 Bad Gatewayzu reproduzieren.
- warten Sie, bis der Fehler
Achten Sie darauf, dass Alle FlowInfos anzeigen aktiviert ist:
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und untersuchen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Traces durch und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Der Fehler tritt in der Regel in einem Ablauf nach der Phase Anfrage an Zielserver gesendet auf, wie unten gezeigt:
Notieren Sie sich den Wert des Fehlers aus dem Trace.
Im obigen Beispiel-Trace wird der Fehler als
Received 405 Response without Allow Headerangezeigt. Da der Fehler von Apigee ausgelöst wird, nachdem die Anfrage an den Backend Server gesendet wurde, hat der Backend-Server den405Antwortstatuscode ohne denAllowHeader gesendet.- Rufen Sie im Trace die Phase AX (Analysedaten aufgezeichnet) auf und klicken Sie darauf.
Scrollen Sie im Bereich Phasendetails nach unten zum Abschnitt Fehler-/Antwortheader 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 sind
protocol.http.Response405WithoutAllowHeaderbzw.target, was darauf hinweist, dass dieser Fehler auftritt, weil das Backend den405Antwortstatuscode ohne denAllowHeader gesendet hat.Antwortheader Wert X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
So diagnostizieren Sie den Fehler mit NGINX-Zugriffslogs:
- Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffslogs verwenden, um die
wichtigsten Informationen zu HTTP-
502-Fehlern zu ermitteln. Prüfen Sie die NGINX-Zugriffslogs:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dabei gilt: ORG, ORG und PORT# werden durch tatsächliche Werte ersetzt.
- Suchen Sie nach
502-Fehlern mit dem Fehlercodeprotocol.http.Response405WithoutAllowHeaderin einem bestimmten Zeitraum (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.Response405WithoutAllowHeaderübereinstimmt, ermitteln Sie den Wert der X-Apigee-fault-source.Beispiel für einen 502-Fehler aus dem NGINX-Zugriffslog :
Der obige Beispielseintrag aus dem NGINX-Zugriffslog hat die folgenden Werte für X-Apigee- fault-code und X-Apigee-fault-source:
Antwortheader Wert X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Ursache: 405-Antwort ohne „Allow“-Header vom Backend-Server
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für
502 Bad Gatewaymit dem API-Monitoring, dem Trace-Tool oder den NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte beschrieben. - Wenn der Fehlercode
protocol.http.Response405WithoutAllowHeaderist und die Fehlerquelle den Werttargethat, hat der Backend-Server mit dem Statuscode405ohne den HeaderAllowgeantwortet. Daher antwortet Apigee mit502 Bad Gatewaymit Fehlercodeprotocol.http.Response405WithoutAllowHeader.
Auflösung
Verwenden Sie eine der folgenden Methoden, um das Problem zu beheben:
Backend-Server
Option 1: Backend-Server so korrigieren, dass er den Statuscode 405 mit dem Header „Allow“ sendet :
Achten Sie darauf, dass der Backend-Server immer der Spezifikation RFC 7231, Abschnitt 6.5.5: 405 Method Not Allowed entspricht und den
405Status code sendet, indem er die Liste der zulässigen Methoden als Teil einesAllowHeaders einfügt, wie unten gezeigt:Allow: HTTP_METHODS
- Wenn Ihr Backend-Server beispielsweise die Methoden
GET,POSTundHEADzulässt, muss der HeaderAllowdiese wie folgt enthalten:Allow: GET, POST, HEAD
Fehlerbehandlung
Option 2: Fehlerbehebung verwenden, um den Statuscode 405 mit dem Header „Allow“ von Ihrem API Proxy zu senden:
Wenn der Backend-Server den Statuscode 405 ohne den Header Allow zurückgibt, können Sie die Fehlerbehandlung verwenden, um mit dem Statuscode 405 und dem Header Allow von Ihrem API-Proxy zu antworten. Gehen Sie dazu so vor:
Erstellen Sie eine Richtlinie wie die AssignMessage-Richtlinie oder die RaiseFault-Richtlinie und legen Sie den Statuscode auf
405mit dem HeaderAllowund einer benutzerdefinierten Nachricht fest.Beispiel für eine AssignMessage-Richtlinie zum Senden von 405 mit dem Header „Allow“ :
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Erstellen Sie eine
FaultRulein derTargetEndpoint, die die Richtlinie aufruft, wenn der Fehler502mit dem Fehlercodeprotocol.http.Response405WithoutAllowHeaderauftritt.Beispiel für eine TargetEndpoint-Konfiguration mit FaultRule :
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Speichern Sie diese Änderungen in einer neuen Überarbeitung Ihres API-Proxys und stellen Sie die Überarbeitung bereit.
- Stellen Sie die API-Aufrufe und prüfen Sie, ob Sie den
405Statuscode mit demAllowHeader erhalten.
Attribut konfigurieren
Option 3: Attribut im Nachrichtenprozessor konfigurieren, um zu verhindern, dass Apigee Edge den Fehler 502 zurückgibt
- Wenn Sie Private Cloud-Nutzer sind, können Sie das Attribut
HTTP.ignore.allow_header.for.405auftruesetzen, um zu verhindern, dass Apigee Edge einen502Fehler auslöst, auch wenn der Backend-Server mit dem Statuscode405ohne den HeaderAllowantwortet. Folgen Sie dazu der Anleitung unter: „Ignore allow header for 405 property in Message Processors“ konfigurieren. - Wenn Sie Public Cloud-Nutzer sind, wenden Sie sich bitte an den Apigee Edge-Support
Spezifikation
Apigee erwartet die 405 Method Not Allowed Antwort vom Backend-Server zusammen
mit dem Allow Header gemäß den folgenden Spezifikationen:
| Spezifikation | |
|---|---|
| RFC 7231, Abschnitt 6.5.5: 405 Method Not Allowed | |
| RFC 7231, Abschnitt 7.4.1: Allow |
Wichtige Hinweise
Die empfohlene Lösung besteht darin, den Backend-Server so zu korrigieren, dass er den 405 Statuscode
mit dem Allow Header sendet und der Spezifikation
RFC 7231, Abschnitt 6.5.5: 405 Method Not Allowed entspricht.
Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, lesen Sie den Abschnitt Erfassen von Diagnoseinformationen erforderlich.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln 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
curlBefehl, der verwendet wurde, um den502 Bad Gatewaymit dem Fehlercodeprotocol.http.Response405WithoutAllowHeaderzu reproduzieren - 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-Zugriffslogs
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dabei gilt: ORG, ORG und PORT# werden durch tatsächliche Werte ersetzt.
- Systemprotokolle des Message Processors
/opt/apigee/var/log/edge-message-processor/logs/system.log