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.EmptyPath 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":"Request path cannot be empty",
"detail":{
"errorcode":"protocol.http.EmptyPath"
}
}
}Mögliche Ursachen
Dieser Fehler tritt auf, wenn die Anfrage-URL des Backend-Servers, die durch die Ablaufvariable
target.url dargestellt wird, einen leeren Pfad enthält.
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 immer einen Schrägstrich (/) enthalten, auch wenn der Pfad keine anderen Zeichen enthält.
Wenn die Anfrage-URL des Backend-Servers also überhaupt keine path-Komponente hat, d. h. nicht einmal einen Schrägstrich (/), antwortet Apigee Edge mit 500 Internal Server Error und dem Fehlercode protocol.http.EmptyPath.
Beispiel: Wenn target.url den Wert https://www.mocktarget.apigee.net hat, tritt dieser Fehler auf, da die path -Komponente leer ist oder fehlt.
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
|---|---|---|
| Die URL des Backend-Servers (target.url) hat einen leeren Pfad | Die Backend-Server-URL, die durch die Ablaufvariable target.url dargestellt wird, hat einen leeren Pfad. |
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-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 den Fehlercode im Vergleich zur Zeit dar.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.EmptyPathaus, wie unten dargestellt:
Informationen zum Fehlercode
protocol.http.EmptyPathwerden wie unten dargestellt angezeigt:
Klicken Sie auf Logs ansehen , um die Zeile für die fehlgeschlagene Anfrage zu maximieren.
- Notieren Sie sich im Fenster Logs die folgenden Details:
- Statuscode:
500 - Fehlerquelle:
target - Fehlercode:
protocol.http.EmptyPath
- Statuscode:
- Wenn die Fehlerquelle
targetund der Fehlercodeprotocol.http.EmptyPathist, bedeutet das, dass die Backend-Server-URL einen leeren 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.
error: Request path cannot be empty (Fehler: Der Anfragepfad darf nicht leer sein)
Da der Fehler von Apigee Edge nach der Phase Target Request Flow Started (Zielanfrage-Ablauf gestartet) ausgelöst wird, weist er darauf hin, dass
pathin der Backend-Server-URL leer ist. Dies geschieht höchstwahrscheinlich, wenn die Ablaufvariabletarget.url(die die URL für den Backend-Server darstellt) durch eine der Richtlinien im Anfrageablauf mit einem leeren Pfad aktualisiert wurde.- Sehen Sie sich den Abschnitt Variables Read and Assigned (Variablen gelesen und zugewiesen) in jedem der Abläufe rückwärts vom Fehlerpunkt bis zur Phase Target Request Flow Started (Zielanfrageablauf gestartet) an.
Ermitteln Sie die Richtlinie, in der die Ablaufvariable
target.urlaktualisiert wird.Beispiel-Trace, in dem die Ablaufvariable
target.urldurch die JavaScript-Richtlinie aktualisiert wurde:
Im oben gezeigten Beispiel-Trace wird der Wert der Ablaufvariablen
target.urlin einer JavaScript-Richtlinie mit dem Namen SetTargetURL so aktualisiert:target.url : https://mocktarget.apigee.net
target.urlhat die folgenden Komponenten:- Schema:
https://mocktarget.apigee.net - path:leer
- Schema:
- Daher erhalten Sie die Fehlermeldung
Request path cannot be empty. - 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 sind
protocol.http.EmptyPathbzw.target. Das bedeutet, dass dieser Fehler auftritt, weil die Backend-Server-URL einen leeren Pfad hat.Antwortheader Wert X-Apigee-fault-code protocol.http.EmptyPathX-Apigee-fault-source target
NGINX
Verfahren 3: NGINX-Zugriffsprotokolle 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.EmptyPathin einem 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.EmptyPathü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.EmptyPathX-Apigee-fault-source targetDie Werte von X-Apigee-fault-code und X-Apigee-fault-source sind
protocol.http.EmptyPathbzw.target. Das bedeutet, dass dieser Fehler durch einen leeren Pfad in der Backend-Server-URL verursacht wird.
Ursache: Die Backend-Server-URL (target.url) hat einen leeren 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.EmptyPathund der Fault Source (Fehlerquelle) den Werttargethat, bedeutet das, dass die Backend-Server-URL einen leeren 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, d. h.target.url, dynamisch mit einer der Richtlinien (im Proxy-/freigegebenen Ablauf) im Zielanfrageablauf zu aktualisieren, sodass sie einen leeren Pfad hat.- Prüfen Sie mit einem der folgenden Schritte, ob die Ablaufvariable
target.urltatsächlich einen leeren Pfad und die Quelle für ihren Wert hat:Trace
Trace-Tool verwenden
Wenn Sie einen Trace für diesen Fehler erfasst haben, gehen Sie so vor, wie unter Trace-Tool verwenden beschrieben:
- Prüfen Sie, ob
target.urleinen leeren Pfad hat. Wenn ja, ermitteln Sie, durch welche Richtlinie der Wert von
target.urlso geändert oder aktualisiert wurde, dass er einen leeren Pfad enthält.Beispiel-Trace, in dem die Ablaufvariable
target.url:durch die JavaScript-Richtlinie aktualisiert wurde
- Im obigen Beispiel-Trace sehen Sie, dass die JavaScript-Richtlinie den Wert von
target.urlso geändert oder aktualisiert hat, dass er einen leeren Pfad enthält. target.urlhat die folgenden Komponenten:- Schema:
https://mocktarget.apigee.net - path:leer
- 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, prüfen Sie sie und gehen Sie so vor:
- Prüfen Sie, ob
target.urleinen leeren Pfad hat. - Prüfen Sie, ob Sie ermitteln können, durch welche Richtlinie
target.urlso geändert wurde, dass sie einen leeren Pfad enthält.
- 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 Richtlinie (z. B. AssignMessage oder JavaScript) an, die die Ablaufvariable
target.urländert oder aktualisiert, und ermitteln Sie die Ursache dafür, dasstarget.urleinen leeren Pfad hat.Hier sind einige Beispielrichtlinien, die die Ablaufvariable
target.urlfälschlicherweise so aktualisieren, dass sie einen leeren Pfad enthält, was zu diesem Fehler führt.Beispiel 1
Beispiel 1: Aktualisieren der
target.url-Variablen in der JavaScript-Richtlinievar url = "https://mocktarget.apigee.net" context.setVariable("target.url", url);
Im obigen Beispiel wird die Ablaufvariable
target.urlmit dem Werthttps://mocktarget.apigee.netaktualisiert, der in einer anderen Variablenurlenthalten ist.target.urlhat die folgenden Komponenten:- Schema:
https://mocktarget.apigee.net - path:leer
Da der Pfad leer ist, gibt Apigee Edge
500 Internal Server Errormit dem Fehlercodeprotocol.http.EmptyPathzurück.Beispiel 2
Beispiel 2: Aktualisieren der JavaScript-Richtlinienvariablen
target.urlvar 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, deren 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.Beispiel für eine vom Nutzer gestellte Anfrage:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token>
In diesem Beispiel wird der Headerpfad nicht als Teil der Anfrage gesendet. Daher ist der Wert des Variablenpfads in der JavaScript-Richtlinie
null.Das bedeutet:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + nulltarget.url = https://mocktarget.apigee.netnull
target.urlhat die folgenden Komponenten:- Schema:
https://mocktarget.apigee.netnull - path:leer
Beispiel 3
Beispiel 3: AssignMessage-Richtlinie, die die Variable
target.urlüber eine andere Variable aktualisiert<AssignMessage async="false" continueOnError="false" enabled="true" name=">AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
target.urlhat die folgenden Komponenten:- Schema:
https://mocktarget.apigee.net - path:leer
In allen oben genannten Beispielen ist der Pfad in der Backend-Server-URL, also
target.url, leer. Daher gibt Apigee Edge500 Internal Server Errormit dem Fehlercodeprotocol.http.EmptyPathzurück.- Schema:
Auflösung
Gemäß der Spezifikation
RFC 3986, Abschnitt 2: Syntaxkomponenten ist die Komponente path erforderlich und muss immer einen Schrägstrich (/) enthalten, auch wenn keine anderen Zeichen Teil von path sind. So beheben Sie das Problem:
- Achten Sie darauf, dass die Backend-Server-URL, die durch die Ablaufvariable
target.urldargestellt wird, immer einen nicht leeren Pfad hat.- 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, dürfen diese Variablen keinen leeren Pfad haben. - Wenn Sie String-Operationen ausführen, um den Wert der Ablaufvariablen
target.urlzu ermitteln, achten Sie darauf, dass das Ergebnis oder der Ausgang der String-Operationen keinen leeren 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 im Abschnitt Diagnose besprochenen Beispielen können Sie dieses Problem wie unten beschrieben beheben:
Beispiel 1
Beispiel 1: Aktualisieren der
target.url-Variablen in der JavaScript-RichtlinieFügen Sie der Variablen
urleinen Schrägstrich (/) hinzu, um dieses Problem zu beheben, wie unten dargestellt:var url = "https://mocktarget.apigee.net/" context.setVariable("target.url", url);
Beispiel 2
Beispiel 2: Aktualisieren der JavaScript-Richtlinienvariablen
target.urlvar 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, z. B.
/iloveapis, als Teil des AnfrageheadersPathübergeben, um dieses Problem zu beheben. Beispiel:Beispielanfrage:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
Beispiel 3
Beispiel 3: AssignMessage-Richtlinie, mit der die Variable
target.urlüber eine andere Variable aktualisiert wirdFügen Sie im Element
<Value>der AssignMessage-Richtlinie einen gültigen Pfad hinzu. Sie können beispielsweise/jsonals Pfad für die MockTarget API verwenden. Ändern Sie das<Value>-Element inhttps://mocktarget.apigee.net/json, wie unten gezeigt:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/json</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Spezifikation
Apigee Edge erwartet, dass die Backend-Server-URL gemäß den folgenden Spezifikationen keinen leeren Pfad hat:
| 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.EmptyPathverwendet 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