500 Interner Serverfehler – BadPath

<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:

  1. Die URI-Syntax besteht aus folgenden Komponenten:

            foo://example.com:8042/over/there?name=ferret#nose
            \_/   \______________/\_________/ \_________/ \__/
             |            |            |            |       |
          scheme      authority       path        query   fragment
    
  2. 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:

  1. <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.

    <ph type="x-smartling-placeholder">
  6. Wähle eine Zelle mit dem Fehlercode protocol.http.BadPath aus, wie dargestellt unten:

  7. Informationen über den Fehlercode protocol.http.BadPath werden angezeigt als (siehe unten):

  8. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.

  9. Im Fenster Logs werden die folgenden Details angezeigt: <ph type="x-smartling-placeholder">
      </ph>
    • Statuscode: 500
    • Fehlerquelle: target
    • Fehlercode: protocol.http.BadPath
  10. Wenn die Fehlerquelle target und der Fehlercode protocol.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:

  1. 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
  2. Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
  5. Sie finden den Fehler in der Regel in einem Ablauf nach Zielanfragefluss gestartet wie unten dargestellt:

  6. 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.

  7. Sehen Sie sich den Abschnitt Gelesene und zugewiesene Variablen in jedem Ablauf rückwärts an. vom Fehlerfluss in Richtung Zielanfragefluss gestartet.
  8. 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 namens JS- SetTargetURL aktualisiert: target.url : https://mocktarget.apigee.net?json

  9. Der Wert in target.url hat die folgenden Komponenten: <ph type="x-smartling-placeholder">
      </ph>
    • scheme: https
    • Zertifizierungsstelle: mocktarget.apigee.net
    • Pfad: ?json
  10. Da die Komponente path mit einem Fragezeichen (?) beginnt, anstelle eines Schrägstrichs (/) erhalten Sie den Fehler Invalid request path
  11. Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
  12. 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:

  13. 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:

  1. Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs ermitteln, die wichtigsten Informationen zu HTTP 500 Internal Server Error.
  2. Prüfen Sie die NGINX-Zugriffslogs:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    <ph type="x-smartling-placeholder">
  3. Nach 500-Fehlern mit Fehlercode suchen protocol.http.BadPath während eines bestimmten Zeitraums (wenn das Problem im oder Anfragen mit 500 fehlschlagen.
  4. Wenn Sie 500-Fehler mit dem X-Apigee-fault-code finden den Wert von protocol.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

  1. 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.
  2. Wenn der Fehlercode protocol.http.BadPath ist und Fehlerquelle den Wert target, dann weist dies darauf hin, dass die Back-End-Server-URL eine ungültige Pfad.
  3. Die Backend-Server-URL wird durch die Flussvariable 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.

    <ph type="x-smartling-placeholder">
  4. 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

    1. Prüfe, ob target.url einen ungültigen Pfad hat, z. B. ob er beginnt durch ein Fragezeichen (?) anstelle eines Schrägstrichs (/) zu ersetzen.
    2. 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 .

    3. 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.
    4. 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.

    Logs

    Logs auf Ihrem Logserver verwenden

    1. 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.
    2. Wenn Sie die Protokolle haben, überprüfen Sie sie und <ph type="x-smartling-placeholder">
        </ph>
      1. Prüfe, ob target.url einen ungültigen Pfad hat.
      2. Prüfen, ob Sie die Informationen zu der geänderten Richtlinie ermitteln können target.url enthält ungültigen Pfad

    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
  5. 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ür target.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 Wert https://mocktarget.apigee.net?json in einem anderen Variable url.

    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 Edge 500 Internal Server Error mit Fehlercode protocol.http.BadPath.

    Beispiel 2

    Beispiel 2: JavaScript-Richtlinie zum Aktualisieren der Variable „target.url“ basierend auf dem Wert im Anfrageheader

    var 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 Wert https://mocktarget.apigee.net verketten, der in einem Variable url und den Wert einer anderen Variablen path, dessen Wert aus request.header.Path. abgerufen wird

    Wenn 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 ist null.

    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 Edge 500 Internal Server Error mit dem Fehlercode protocol.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 gibt 500 Internal Server Error mit Fehlercode zurück protocol.http.BadPath.

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:

  1. 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>
    1. 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.
    2. 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.
    3. 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.
  2. 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 Anfrageheader

    var 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-Variable

    Fü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ür https://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 von 500 Internal Server Error mit dem Fehlercode protocol.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

    Flussvariablen – Ziel