Sie lesen gerade die Dokumentation zu Apigee Edge.
Apigee X-Dokumentation aufrufen info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 500 Internal Server Error mit dem Fehlercode protocol.http.BadPath als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
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 Backend-Servers, die durch die Ablaufvariable target.url dargestellt wird, einen path enthält, der mit einem Fragezeichen (?) anstelle eines Schrägstrichs (/) beginnt, was ungültig ist.
Gemäß den Spezifikationen RFC 3986, Abschnitt 3: Syntaxkomponenten und RFC 3986, Abschnitt 3.3: Pfad:
Die URI-Syntax besteht aus den folgenden Komponenten:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment- Die Komponente
pathist erforderlich und MUSS mit einem Schrägstrich (/) beginnen und immer einen Schrägstrich enthalten.
Wenn die Anfrage-URL des Backend-Servers also eine path-Komponente enthält, die mit einem Fragezeichen (?) anstelle eines Schrägstrichs (/) beginnt, antwortet Apigee Edge mit 500 Internal Server Error und dem Fehlercode protocol.http.BadPath.
Beispiel: Wenn target.url den Wert https://www.mocktarget.apigee.net?json hat, tritt dieser Fehler auf, da path als ungültig erkannt wird, weil es mit einem Fragezeichen (?) anstelle eines Schrägstrichs (/) beginnt.
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
|---|---|---|
| Die Backend-Server-URL (target.url) hat einen ungültigen Pfad | Die Pfadkomponente in der Backend-Server-URL, die durch die Ablaufvariable target.url dargestellt wird, beginnt mit einem Fragezeichen (?) anstelle eines Schrägstrichs (/). |
Nutzer der Edge Public und Private Cloud |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools oder Verfahren, um diesen Fehler zu diagnostizieren:
API-Monitoring
Methode 1: API-Monitoring verwenden
So diagnostizieren Sie den Fehler mit API Monitoring:
- Melden Sie sich in der Apigee Edge-UI 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 den Fehlercode im Vergleich zur Zeit dar.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.BadPathaus, wie unten dargestellt:
Informationen zum Fehlercode
protocol.http.BadPathwerden wie unten dargestellt 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:
500 - Fehlerquelle:
target - Fehlercode:
protocol.http.BadPath
- Statuscode:
- Wenn Fault Source
targetund Fault Codeprotocol.http.BadPathist, bedeutet das, dass die Backend-Server-URL einen ungültigen Pfad hat.
Trace
Vorgehensweise 2: Trace-Tool verwenden
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und entweder
- Warten Sie, bis der Fehler
500 Internal Server Errorauftritt. - Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um das Problem zu reproduzieren:
500 Internal Server Error
- Warten Sie, bis der Fehler
Prüfen Sie, ob Alle FlowInfos anzeigen aktiviert ist:

- Wählen Sie eine der fehlgeschlagenen Anfragen aus und sehen Sie sich den Trace an.
- Navigieren Sie durch die verschiedenen Phasen des Traces und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Der Fehler tritt in der Regel in einem Ablauf nach der Phase Target Request Flow Started auf, wie unten dargestellt:

Notieren Sie sich den Wert des Fehlers aus dem Trace:
Fehler: Ungültiger Anfragepfad
Da der Fehler von Apigee Edge nach der Phase Target Request Flow Started (Zielanfragefluss gestartet) ausgelöst wird, weist er darauf hin, dass die Backend-Server-URL einen ungültigen Pfad hat. Dies geschieht höchstwahrscheinlich, wenn die Ablaufvariable
target.url(die die URL für den Backend-Server darstellt) in Apigee Edge möglicherweise durch eine der Richtlinien im Zielanfrageablauf mit einem ungültigen Pfad aktualisiert wurde.- Sehen Sie sich den Abschnitt Variables Read and Assigned (Variablen gelesen und zugewiesen) in jedem Ablauf rückwärts vom Fehlerablauf bis zur Phase Target Request Flow Started (Zielanfrageablauf gestartet) an.
- Ermitteln Sie die Richtlinie, in der die Ablaufvariable
target.urlaktualisiert wurde:Beispiel-Trace, in dem die Ablaufvariable
target.url:durch die JavaScript-Richtlinie aktualisiert wurde
Im obigen Beispiel-Trace wird der Wert der Ablaufvariablen
target.urlin einer JavaScript-Richtlinie mit dem NamenJS- SetTargetURLso aktualisiert:target.url : https://mocktarget.apigee.net?json - Der Wert in
target.urlhat die folgenden Komponenten:- Schema:
https - authority:
mocktarget.apigee.net - Pfad:
?json
- Schema:
- Da die Komponente path mit einem Fragezeichen (
?) anstelle eines Schrägstrichs (/) beginnt, wird der FehlerInvalid request pathangezeigt. - Suchen Sie im Trace nach der Phase AX (Analytics Data Recorded) 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 dargestellt:

Die Werte von X-Apigee-fault-code und X-Apigee-fault-source werden als
protocol.http.BadPathbzw.targetangezeigt. Das bedeutet, dass dieser Fehler auftritt, weil die Backend-Server-URL einen ungültigen Pfad hat.Antwortheader Wert X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source target
NGINX
Verfahren 3: NGINX-Zugriffslogs verwenden
So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie Private Cloud-Nutzer sind, können Sie die NGINX-Zugriffsprotokolle verwenden, um die wichtigsten Informationen zu HTTP
500 Internal Server Errorzu ermitteln. NGINX-Zugriffslogs prüfen:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Suchen Sie nach
500-Fehlern mit dem Fehlercodeprotocol.http.BadPathfür einen bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, bei denen weiterhin500-Fehler auftreten. Wenn Sie
500-Fehler mit dem X-Apigee-fault-code finden, der mit dem Wert vonprotocol.http.BadPathübereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.Beispiel für einen 500-Fehler aus dem NGINX-Zugriffslog:
Der obige Beispiel-Eintrag aus dem NGINX-Zugriffslog hat die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-source:
Header Wert X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetDie Werte von X-Apigee-fault-code und X-Apigee-fault-source sind
protocol.http.BadPathbzw.target. Das bedeutet, dass dieser Fehler dadurch verursacht wird, dass die Backend-Server-URL einen ungültigen Pfad hat.
Ursache: Die Back-End-Server-URL (target.url) hat einen ungültigen Pfad.
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für
500 Internal Server Errormithilfe von API Monitoring, Trace Tool oder NGINX-Zugriffsprotokollen, wie in Häufige Diagnoseschritte beschrieben. - Wenn der Fault Code (Fehlercode)
protocol.http.BadPathund die Fault Source (Fehlerquelle) den Werttargethat, bedeutet das, dass die Backend-Server-URL einen ungültigen Pfad hat. Die URL des Backend-Servers wird in Apigee Edge durch die Ablaufvariable
target.urldargestellt. Dieser Fehler tritt in der Regel auf, wenn Sie versuchen, die Backend-Server-URL (target.url) dynamisch mit einer der Richtlinien (im Proxy-/freigegebenen Ablauf) im Zielanfrageablauf zu aktualisieren, sodass sie einen ungültigen Pfad hat.Ermitteln Sie mit einer der folgenden Methoden, ob die Ablaufvariable
target.urltatsächlich einen ungültigen Pfad und die Quelle für ihren Wert hat:Trace
Trace-Tool verwenden
Wenn Sie einen Trace für diesen Fehler erfasst haben, folgen Sie der Anleitung unter Trace-Tool verwenden .
- Prüfen Sie, ob
target.urleinen ungültigen Pfad hat, d. h., ob er mit einem Fragezeichen (?) anstelle eines Schrägstrichs (/) beginnt. Wenn ja, suchen Sie nach der Richtlinie, mit der der Wert von
target.urlso geändert oder aktualisiert wurde, dass er einen ungültigen Pfad enthält.Beispiel-Trace, in dem die Ablaufvariable
target.urldurch die JavaScript-Richtlinie aktualisiert wurde
- Im obigen Beispiel-Trace sehen Sie, dass die JavaScript-Richtlinie den Wert von
target.urlgeändert oder aktualisiert hat, sodass er einen ungültigen Pfad enthält. target.urlhat die folgenden Komponenten:- Schema:
https - authority:
mocktarget.apigee.net - Pfad:
?json
Der Pfad beginnt mit einem Fragezeichen (
?) anstelle eines Schrägstrichs (/). Daher ist er ungültig.- Schema:
Logs
Logs auf Ihrem Log-Server verwenden
- Wenn Sie keinen Trace für diesen Fehler haben (ein zeitweiliges Problem), prüfen Sie, ob Sie die Informationen zum Wert der Ablaufvariablen
target.urlmit Richtlinien wie MessageLogging oder ServiceCallout auf Ihrem Logserver protokolliert haben. - Wenn Sie die Logs haben, sehen Sie sie sich an und
- Prüfen Sie, ob
target.urleinen ungültigen Pfad hat. - Ermitteln Sie, durch welche Richtlinie
target.urlso geändert wurde, dass der Pfad ungültig ist.
- Prüfen Sie, ob
API-Proxy
Fehlerhaften API-Proxy prüfen
Wenn Sie keinen Trace oder keine Logs für diesen Fehler haben, prüfen Sie den fehlerhaften API-Proxy, um festzustellen, wodurch die Ablaufvariable
target.urlso geändert oder aktualisiert wurde, dass sie einen ungültigen Pfad enthält. Dann machen Sie Folgendes:- Die Richtlinie im API-Proxy
- Alle freigegebenen Abläufe, die vom Proxy aufgerufen werden
- Prüfen Sie, ob
Sehen Sie sich die spezifische Richtlinie (z. B. AssignMessage oder JavaScript) an, die die Ablaufvariable
target.urländert oder aktualisiert, und ermitteln Sie die Ursache für die Aktualisierung vontarget.urlmit einem ungültigen Pfad.Hier sind einige Beispielrichtlinien, die die Ablaufvariable
target.urlfalsch aktualisieren, sodass sie einen ungültigen Pfad enthält, der zu diesem Fehler führt.Beispiel 1
Beispiel 1: Aktualisieren der
target.url-Variablen in der JavaScript-Richtlinievar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Im obigen Beispiel wird die Ablaufvariable
target.urlmit dem Werthttps://mocktarget.apigee.net?jsonaktualisiert, der in einer anderen Variablenurl.enthalten ist.Der Wert von
urlhat die folgenden Komponenten:- Schema:
https - authority:
mocktarget.apigee.net - Pfad:
?json
Der Pfad beginnt mit einem Fragezeichen (
?) anstelle eines Schrägstrichs (/), was ungültig ist. Daher gibt Apigee Edge500 Internal Server Errormit dem Fehlercodeprotocol.http.BadPathzurück.Beispiel 2
Beispiel 2: JavaScript-Richtlinie, die die Variable
target.urlbasierend auf dem Wert im Anfrageheader aktualisiertvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Im obigen Beispiel wird die Ablaufvariable
target.urlaktualisiert, indem der Werthttps://mocktarget.apigee.net, der in einer Variablenurlenthalten ist, mit dem Wert einer anderen Variablenpathverkettet wird, dessen Wert ausrequest.header.Path.abgerufen wird.Wenn Sie Zugriff auf die tatsächliche Anfrage oder den Trace haben, können Sie den tatsächlichen Wert prüfen, der an
request.header.Pathübergeben wurde.Beispielanfrage des Nutzers
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
In diesem Beispiel wird der Headerpfad nicht als Teil der Anfrage gesendet. Daher ist der Wert der Variablen
pathin der JavaScript-Richtlinienull.Das bedeutet:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + "?user"target.url = https://mocktarget.apigee.net?user
Der Wert von
target.urlhat die folgenden Komponenten:- Schema:
https - authority:
mocktarget.apigee.net - Pfad:
?user
Der Pfad beginnt mit einem Fragezeichen (
?) anstelle eines Schrägstrichs (/), was ungültig ist. Daher gibt Apigee Edge500 Internal Server Errormit dem Fehlercodeprotocol.http.BadPathzurück.Beispiel 3
Beispiel 3:
target.url-Variable mit AssignMessage-Richtlinie aktualisieren<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
urlhat die folgenden Komponenten:- Schema:
https - authority:
mocktarget.apigee.net - Pfad:
?echo
Auch in diesem Beispiel beginnt der Pfad mit einem Fragezeichen (
?) anstelle eines Schrägstrichs (/), was ungültig ist. Daher gibt Apigee Edge500 Internal Server Errormit dem Fehlercodeprotocol.http.BadPathzurück.- Schema:
Auflösung
Gemäß der URL-Spezifikation
RFC 3986, Abschnitt 3: Syntaxkomponenten ist die Komponente path erforderlich und muss immer mit "/" beginnen. Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben:
- Achten Sie darauf, dass die Backend-Server-URL, die durch die Ablaufvariable
target.urldargestellt wird, immer einen gültigen Pfad hat und immer mit einem Schrägstrich (/) beginnt.- In einigen Fällen ist im Pfad kein Ressourcenname enthalten. Achten Sie dann darauf, dass der Pfad mindestens einen Schrägstrich (
/) enthält. - Wenn Sie andere Variablen verwenden, um den Wert der Ablaufvariablen
target.urlzu bestimmen, achten Sie darauf, dass diese Variablen keinen ungültigen Pfad haben. - Wenn Sie String-Operationen ausführen, um den Wert der Ablaufvariablen
target.urlzu ermitteln, achten Sie darauf, dass das Ergebnis der String-Operationen keinen ungültigen Pfad hat.
- In einigen Fällen ist im Pfad kein Ressourcenname enthalten. Achten Sie dann darauf, dass der Pfad mindestens einen Schrägstrich (
In den oben besprochenen Beispielen können Sie dieses Problem so beheben:
Beispiel 1
Beispiel 1: Aktualisieren der
target.url-Variablen in der JavaScript-RichtlinieVerwenden Sie in der Variablen
urleinen Schrägstrich (/) anstelle eines Fragezeichens (?), um dieses Problem zu beheben. Beispiel:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Beispiel 2
Beispiel 2: JavaScript-Richtlinie, die die Variable
target.urlbasierend auf dem Wert im Anfrageheader aktualisiertvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Achten Sie darauf, dass Sie einen gültigen Pfad übergeben, z. B.
/user, als Teil des AnfrageheadersPath, um dieses Problem zu beheben, wie unten dargestellt:Beispielanfrage:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Beispiel 3
Beispiel 3: AssignMessage-Richtlinie, die die Variable
target.urlaktualisiertFügen Sie im Element
<Value>der AssignMessage-Richtlinie einen gültigen Pfad hinzu. Ersetzen Sie dazu das Fragezeichen (?) durch einen Schrägstrich (/) im Element<Value>und legen Sie es aufhttps://mocktarget.apigee.net/echofest, um das Problem 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 Backend-Server-URL immer mit einem Schrägstrich (/) beginnt, wie in den folgenden Spezifikationen beschrieben:Spezifikation RFC 3986, Abschnitt 3: Syntaxkomponenten RFC 3986, Abschnitt 3.3: Pfad Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, gehen Sie zu 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 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, der zum Reproduzieren des500 Internal Server Errormit dem Fehlercodeprotocol.http.BadPathverwendet wurde - Trace-Datei für die API-Anfragen
Wenn Sie ein 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~ENV.PORT#_access_logDabei gilt:ORG, ENV und PORT# werden durch tatsächliche Werte ersetzt.
- Systemprotokolle des Message Processors
/opt/apigee/var/log/edge-message- processor/logs/system.log
Verweise