<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 500 Internal Server Error
mit
Fehlercode protocol.http.BadPath
als Antwort für API-Aufrufe.
Fehlermeldung
Die Clientanwendung ruft den folgenden Antwortcode ab:
HTTP/1.1 500 Internal Server Error
Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:
{ "fault":{ "faultstring":"Invalid request path", "detail":{ "errorcode":"protocol.http.BadPath" } } }
Mögliche Ursachen
Dieser Fehler tritt auf, wenn die Anfrage-URL des Back-End-Servers, dargestellt durch die Flussvariable
target.url
,
enthält stattdessen eine path
, die mit einem Fragezeichen (?
) beginnt
eines Schrägstrichs (/
), der ungültig ist.
Gemäß den Spezifikationen <ph type="x-smartling-placeholder"></ph> RFC 3986, Abschnitt 3: Syntaxkomponenten und <ph type="x-smartling-placeholder"></ph> RFC 3986, Abschnitt 3.3: Pfad:
Die URI-Syntax besteht aus folgenden Komponenten:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
- Die Komponente
path
ist erforderlich und MUSS mit und beginnen. immer einen Schrägstrich (/
) enthalten.
Wenn also die Anfrage-URL des Back-End-Servers eine path
-Komponente enthält,
mit einem Fragezeichen (?
) anstelle eines Schrägstrichs (/
), dann Apigee
Edge antwortet mit 500 Internal Server Error
und Fehlercode
protocol.http.BadPath
Beispiel: target.url
hat den Wert
https://www.mocktarget.apigee.net?json
enthält, tritt dieser Fehler
path
ist ungültig,da die ID mit einem Fragezeichen beginnt
(?
) anstelle eines Schrägstrichs (/
) verwenden.
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Die Back-End-Server-URL (target.url) hat einen ungültigen Pfad | Die Pfadkomponente in der Backend-Server-URL, dargestellt durch eine Flussvariable
target.url beginnt mit einem Fragezeichen (? ) statt mit einer Zeile vorwärts.
Schrägstrich (/ ) enthalten. |
Edge-Nutzer von öffentlichen und privaten Clouds |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools oder Techniken, um diesen Fehler zu diagnostizieren:
API-Monitoring
Verfahren 1: API-Monitoring verwenden
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:
- <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
- Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.
<ph type="x-smartling-placeholder">Wähle eine Zelle mit dem Fehlercode
protocol.http.BadPath
aus, wie dargestellt unten:Informationen über den Fehlercode
protocol.http.BadPath
werden angezeigt als (siehe unten):Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
- Im Fenster Logs werden die folgenden Details angezeigt:
<ph type="x-smartling-placeholder">
- </ph>
- Statuscode:
500
- Fehlerquelle:
target
- Fehlercode:
protocol.http.BadPath
- Statuscode:
- Wenn die Fehlerquelle
target
und der Fehlercodeprotocol.http.BadPath
, dann bedeutet dies, dass die Backend-Server-URL ein Ungültiger Pfad.
Trace
Verfahren 2: Trace-Tool verwenden
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und entweder
<ph type="x-smartling-placeholder">
- </ph>
- Warten Sie, bis der Fehler
500 Internal Server Error
auftritt, oder - Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um es zu reproduzieren.
500 Internal Server Error
- Warten Sie, bis der Fehler
Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) aktiviert ist:
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
Sie finden den Fehler in der Regel in einem Ablauf nach Zielanfragefluss gestartet wie unten dargestellt:
Notieren Sie sich den Wert des Fehlers aus dem Trace:
error: Ungültiger Anfragepfad
Da der Fehler von Apigee Edge nach dem Start des Zielanfrageflusses ausgegeben wird angezeigt wird, weist sie darauf hin, dass die Back-End-Server-URL einen ungültigen Pfad hat. Dies würde ist am wahrscheinlichsten, wenn die Flussvariable
target.url
(die die URL darstellt) für Backend-Server) in Apigee Edge wurde möglicherweise mit einem ungültigen Pfad durch einer der Richtlinien im Ziel-Anfrageablauf.- Sehen Sie sich den Abschnitt Gelesene und zugewiesene Variablen in jedem Ablauf rückwärts an. vom Fehlerfluss in Richtung Zielanfragefluss gestartet.
- Legen Sie die Richtlinie fest, in der sich die Flussvariable
target.url
befand. Aktualisiert:Beispiel-Trace, das die JavaScript-Richtlinie zeigt, die Flussvariable aktualisiert hat
target.url:
.Notieren Sie sich im oben gezeigten Beispiel-Trace den Wert der Flussvariablenvariablen.
target.url
wird so in einer JavaScript-Richtlinie namensJS- SetTargetURL
aktualisiert:target.url : https://mocktarget.apigee.net?json
- Der Wert in
target.url
hat die folgenden Komponenten: <ph type="x-smartling-placeholder">- </ph>
- scheme:
https
- Zertifizierungsstelle:
mocktarget.apigee.net
- Pfad:
?json
- scheme:
- Da die Komponente path mit einem Fragezeichen (
?
) beginnt, anstelle eines Schrägstrichs (/
) erhalten Sie den FehlerInvalid request path
- Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
Scrollen Sie nach unten zum Abschnitt Phase Details - Error Headers (Phase-Details – Fehlerheader) und legen Sie fest, für X-Apigee-fault-code und X-Apigee-fault-code, wie unten gezeigt:
Sie sehen die Werte X-Apigee-fault-code und X-Apigee-Fehlerquelle. als
protocol.http.BadPath
bzw.target
Dieser Fehler wird dadurch verursacht, dass die Backend-Server-URL einen ungültigen Pfad hat.Antwortheader Wert X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
NGINX
Verfahren 3: NGINX-Zugriffslogs verwenden
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs ermitteln,
die wichtigsten Informationen zu HTTP
500 Internal Server Error
. Prüfen Sie die NGINX-Zugriffslogs:
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Nach
500
-Fehlern mit Fehlercode suchenprotocol.http.BadPath
während eines bestimmten Zeitraums (wenn das Problem im oder Anfragen mit500
fehlschlagen. Wenn Sie
500
-Fehler mit dem X-Apigee-fault-code finden den Wert vonprotocol.http.BadPath
und dann den Wert von X- Apigee-Fehlerquelle.Beispiel für den Fehler 500 aus dem NGINX-Zugriffsprotokoll:
Der obige Beispieleintrag aus dem NGINX-Zugriffslog enthält die folgenden Werte für X-Apigee- Fehlercode und X-Apigee-Fehler-Quelle:
Header Wert X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
Beachten Sie, dass die Werte von X-Apigee-fault-code und X-Apigee-fault-code folgende sind:
protocol.http.BadPath
bzw.target
, was bedeutet, Dieser Fehler wird dadurch verursacht, dass die Back-End-Server-URL einen ungültigen Pfad hat.
Ursache: Die Backend-Server-URL (target.url) hat einen ungültigen Pfad.
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für
500 Internal Server Error
mithilfe des API-Monitorings, des Trace-Tools oder der NGINX-Zugriffslogs wie unter Häufige Diagnoseschritte. - Wenn der Fehlercode
protocol.http.BadPath
ist und Fehlerquelle den Werttarget
, dann weist dies darauf hin, dass die Back-End-Server-URL eine ungültige Pfad. Die Backend-Server-URL wird durch die Flussvariable
<ph type="x-smartling-placeholder">target.url
in Apigee dargestellt. Edge Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, die Backend-Server-URL zu aktualisieren. (target.url
) dynamisch unter Verwendung einer der Richtlinien (innerhalb Proxy/freigegebenen Ablauf) im Zielanfragefluss, sodass er einen ungültigen Pfad hat.Stellen Sie fest, ob die Flussvariable
target.url
tatsächlich einen ungültigen Wert hat. path und die Quelle für den zugehörigen Wert mithilfe einer der folgenden Methoden:Trace
Trace-Tool verwenden
Wenn Sie einen Trace für diesen Fehler erfasst haben, verwenden Sie die Schritte wie unter Trace-Tool verwenden und
- Prüfe, ob
target.url
einen ungültigen Pfad hat, z. B. ob er beginnt durch ein Fragezeichen (?
) anstelle eines Schrägstrichs (/
) zu ersetzen. Falls ja, ermitteln Sie die Richtlinie, die den Wert
target.url
, um einen ungültigen Pfad zu enthalten.Beispiel-Trace, das die JavaScript-Richtlinie zeigt, die Flussvariable aktualisiert hat
target.url
.- Beachten Sie im obigen Beispiel-Trace, dass die JavaScript-Richtlinie den Wert von
target.url
so geändert oder aktualisiert hat, dass er einen ungültigen Pfad enthält. target.url
hat die folgenden Komponenten: <ph type="x-smartling-placeholder">- </ph>
- scheme:
https
- Zertifizierungsstelle:
mocktarget.apigee.net
- Pfad:
?json
Der Pfad beginnt mit einem Fragezeichen (
?
) statt mit einem Vorwärtspfeil Schrägstrich (/
) und ist daher ungültig.- scheme:
Logs
Logs auf Ihrem Logserver verwenden
- Wenn Sie keine Ablaufverfolgung für diesen Fehler haben (ein vorübergehendes Problem), prüfen Sie,
Sie haben die Informationen über den Wert der Flussvariablen protokolliert.
target.url
, unter Verwendung von Richtlinien wie <ph type="x-smartling-placeholder"></ph> MessageLogging oder <ph type="x-smartling-placeholder"></ph> ServiceCallout mit Ihrem Logserver verknüpfen. - Wenn Sie die Protokolle haben, überprüfen Sie sie und
<ph type="x-smartling-placeholder">
- </ph>
- Prüfe, ob
target.url
einen ungültigen Pfad hat. - Prüfen, ob Sie die Informationen zu der geänderten Richtlinie ermitteln können
target.url
enthält ungültigen Pfad
- Prüfe, ob
API-Proxy
Fehlerhaften API-Proxy prüfen
Wenn Sie weder ein Trace noch Protokolle für diesen Fehler haben, prüfen Sie die fehlerhafte API Proxy, um zu bestimmen, was die Flussvariable
target.url
geändert oder aktualisiert hat enthält einen ungültigen Pfad. Dann machen Sie Folgendes:- Richtlinie im API-Proxy
- Alle freigegebenen Abläufe, die vom Proxy aufgerufen werden
- Prüfe, ob
Untersuchen Sie die Richtlinie sorgfältig (z. B. „AssignMessage“ oder „JavaScript“), durch die die oder aktualisiert die Flussvariable
target.url
und ermittelt die Ursache fürtarget.url
wird so aktualisiert, dass er einen ungültigen Pfad enthält.Hier sind einige Beispielrichtlinien, die die Flussvariable
target.url
aktualisieren fälschlicherweise einen ungültigen Pfad enthalten, der zu diesem Fehler führt.Beispiel 1
Beispiel 1: JavaScript-Richtlinie zur Aktualisierung der Variable „
target.url
“var url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Beachten Sie im obigen Beispiel, dass die Flussvariable
target.url
aktualisiert wird. wobei der Werthttps://mocktarget.apigee.net?json
in einem anderen Variableurl.
Der Wert von
url
besteht aus folgenden Komponenten:- scheme:
https
- Zertifizierungsstelle:
mocktarget.apigee.net
- Pfad:
?json
Der Pfad beginnt mit einem Fragezeichen (
?
) anstelle eines Schrägstrichs. (/
). Dies ist ungültig. Daher gibt Apigee Edge500 Internal Server Error
mit Fehlercodeprotocol.http.BadPath
.Beispiel 2
Beispiel 2: JavaScript-Richtlinie zum Aktualisieren der Variable „
target.url
“ basierend auf dem Wert im Anfrageheadervar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Beachten Sie im obigen Beispiel, dass die Flussvariable
target.url
aktualisiert wird indem Sie den Werthttps://mocktarget.apigee.net
verketten, der in einem Variableurl
und den Wert einer anderen Variablenpath
, dessen Wert ausrequest.header.Path.
abgerufen wirdWenn Sie Zugriff auf die eigentliche Anfrage oder den Trace haben, können Sie den tatsächlichen Wert an
request.header.Path
übergeben.Beispielanfrage des Nutzers
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
In diesem Beispiel wird der Header-Pfad nicht als Teil der Anfrage gesendet. Daher ist der Wert der Variablen
path
in der JavaScript-Richtlinie istnull
.Das bedeutet:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + "?user"
target.url = https://mocktarget.apigee.net?user
Der Wert von
target.url
besteht aus folgenden Komponenten:- scheme:
https
- Zertifizierungsstelle:
mocktarget.apigee.net
- Pfad:
?user
Der Pfad beginnt mit einem Fragezeichen (
?
) anstelle eines Schrägstrichs. (/
). Dies ist ungültig. Daher gibt Apigee Edge500 Internal Server Error
mit dem Fehlercodeprotocol.http.BadPath
zurück.Beispiel 3
Beispiel 3: AssignMessage-Richtlinie aktualisiert
target.url
-Variable<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net?echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Der Wert von
url
hat die folgenden Komponenten:- scheme:
https
- Zertifizierungsstelle:
mocktarget.apigee.net
- Pfad:
?echo
Auch in diesem Beispiel beginnt der Pfad mit einem Fragezeichen (
?
). anstelle eines Schrägstrichs (/
), der ungültig ist. Dementsprechend wird Apigee Edge gibt500 Internal Server Error
mit Fehlercode zurückprotocol.http.BadPath
.- scheme:
Auflösung
Gemäß der URL-Spezifikation
<ph type="x-smartling-placeholder"></ph>
RFC 3986, Abschnitt 3: Syntaxkomponenten, die Komponente path
ist erforderlich.
Außerdem MUSS er immer mit "/" beginnen. Gehen Sie daher so vor, um das Problem zu beheben:
- Achten Sie darauf, dass die Back-End-Server-URL, dargestellt durch die Flussvariable
target.url
hat immer einen gültigen Pfad und er beginnt immer mit einem Schrägstrich (/
). <ph type="x-smartling-placeholder">- </ph>
- In einigen Fällen enthält der Pfad möglicherweise keinen Ressourcennamen. Prüfen Sie dann, ob das Feld
Pfad mindestens einen Schrägstrich (
/
) enthält. - Wenn Sie andere Variablen verwenden, um den Wert der Flussvariablen zu bestimmen
target.url
und stellen Sie sicher, dass andere Variablen keinen ungültiger Pfad an. - Wenn Sie Zeichenfolgenvorgänge ausführen, um den Wert der Flussvariablen zu bestimmen
target.url
. Prüfen Sie dann, ob das Ergebnis oder Ergebnis des Strings Vorgänge haben keinen ungültigen Pfad.
- In einigen Fällen enthält der Pfad möglicherweise keinen Ressourcennamen. Prüfen Sie dann, ob das Feld
Pfad mindestens einen Schrägstrich (
In den oben beschriebenen Beispielen können Sie dieses Problem wie unten beschrieben beheben:
Beispiel 1
Beispiel 1: JavaScript-Richtlinie zur Aktualisierung der Variable „
target.url
“Verwenden Sie in den Tags einen Schrägstrich (
/
) anstelle eines Fragezeichens (?
)url
, um das Problem zu beheben:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Beispiel 2
Beispiel 2: JavaScript-Richtlinie zum Aktualisieren der Variable „
target.url
“ basierend auf dem Wert im Anfrageheadervar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Sie müssen einen gültigen Pfad angeben, z. B.
/user
als Teil der Anfrage.Path
, um das Problem zu beheben:Beispielanfrage:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Beispiel 3
Beispiel 3: AssignMessage-Richtlinie aktualisiert
target.url
-VariableFügen Sie im
<Value>
-Element derAssignMessage-Richtlinie einen gültigen Pfad hinzu. Ersetzen Sie also das Fragezeichen (?
) durch a Schrägstrich (/
) im<Value>
-Element und Legen Sie dafürhttps://mocktarget.apigee.net/echo
fest, um das Problem wie unten gezeigt zu beheben:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/echo</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Spezifikation
Apigee Edge erwartet, dass die
path
-Komponente in der Back-End-Server-URL MUSS immer mit einem Schrägstrich (/
) beginnen, wie im Folgenden beschrieben. Spezifikationen:Spezifikation <ph type="x-smartling-placeholder"></ph> RFC 3986, Abschnitt 3: Syntaxkomponenten <ph type="x-smartling-placeholder"></ph> RFC 3986, Abschnitt 3.3: Pfad Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, gehen Sie zu Muss Diagnosedaten.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:
Wenn Sie ein 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 von500 Internal Server Error
mit dem Fehlercodeprotocol.http.BadPath
- 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
Verweise