500 Errore interno del server - BadPath

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP di 500 Internal Server Error con il codice di errore protocol.http.BadPath in risposta alle chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 500 Internal Server Error

Potresti inoltre visualizzare il seguente messaggio di errore:

{
   "fault":{
      "faultstring":"Invalid request path",
      "detail":{
         "errorcode":"protocol.http.BadPath"
      }
   }
}

Possibili cause

Questo errore si verifica se l'URL della richiesta del server di backend, rappresentato dalla variabile di flusso target.url, contiene un elemento path che inizia con un punto interrogativo (?) di una barra (/), che non è valida.

In base alle specifiche RFC 3986, sezione 3: Componenti di sintassi e . RFC 3986, sezione 3.3: Percorso:

  1. La sintassi URI include i seguenti componenti:

            foo://example.com:8042/over/there?name=ferret#nose
            \_/   \______________/\_________/ \_________/ \__/
             |            |            |            |       |
          scheme      authority       path        query   fragment
    
  2. Il componente path è obbligatorio e DEVE iniziare con e contengono sempre una barra (/).

Pertanto, se l'URL della richiesta del server di backend ha un componente path che inizia con un punto interrogativo (?) anziché una barra (/), poi Apigee Edge risponde con 500 Internal Server Error e codice di errore protocol.http.BadPath.

Ad esempio: se target.url ha il valore https://www.mocktarget.apigee.net?json, questo errore si verifica quando path risulta non valido perché inizia con un punto interrogativo (?) anziché una barra (/).

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
L'URL del server di backend (target.url) ha un percorso non valido Il componente del percorso nell'URL del server di backend rappresentato dalla variabile di flusso target.url inizia con un punto interrogativo (?) anziché con l'inoltro barra (/). Utenti perimetrali di cloud pubblici e privati

Passaggi diagnostici comuni

Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:

Monitoraggio delle API

Procedura 1: utilizzo del monitoraggio delle API

Per diagnosticare l'errore utilizzando API Monitoring:

  1. Accedi alla UI di Apigee Edge come utente con ruolo appropriato.
  2. Passa all'organizzazione in cui vuoi esaminare il problema.

  3. Vai al menu Analizza > Monitoraggio delle API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
  5. Traccia il codice di errore in base all'ora.

  6. Seleziona una cella con il codice di errore protocol.http.BadPath, come mostrato sotto:

  7. Le informazioni sul codice di errore protocol.http.BadPath vengono visualizzate come come mostrato di seguito:

  8. Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.

  9. Nella finestra Log, tieni presente i seguenti dettagli:
      .
    • Codice di stato: 500
    • Origine errore:target
    • Codice di errore: protocol.http.BadPath
  10. Se Origine di errore è target e Codice di errore è protocol.http.BadPath, questo indica che l'URL del server di backend ha un percorso non valido.

Trace

Procedura 2: utilizzo dello strumento Trace

Per diagnosticare l'errore utilizzando lo strumento Trace:

  1. Attiva la sessione di traccia e
      .
    • Attendi che si verifichi l'errore 500 Internal Server Error oppure
    • Se riesci a riprodurre il problema, esegui la chiamata API per riprodurlo. 500 Internal Server Error
  2. Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:

  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Naviga attraverso le diverse fasi della traccia e individua dove si è verificato l'errore.
  5. In genere troverai l'errore in un flusso successivo al passaggio Flusso di richiesta target avviato come illustrato di seguito:

  6. Prendi nota del valore dell'errore della traccia:

    error: Percorso di richiesta non valido

    Poiché l'errore viene generato da Apigee Edge dopo l'avvio del flusso di richieste target , indica che l'URL del server di backend ha un percorso non valido. Questo potrebbe si verificano molto probabilmente se la variabile di flusso target.url (che rappresenta l'URL per il server di backend) in Apigee Edge potrebbe essere stato aggiornato con un percorso non valido uno dei criteri nel flusso di richieste di destinazione.

  7. Esamina la sezione Variabili lette e assegnate in ogni flusso a ritroso dal flusso di errori alla fase Flusso di richiesta target avviato.
  8. Determina il criterio, dove la variabile di flusso target.url era aggiornato:

    Traccia di esempio che mostra che il criterio JavaScript ha aggiornato la variabile di flusso target.url:

    Nella traccia di esempio mostrata sopra, prendi nota del valore della variabile della variabile di flusso target.url viene aggiornato in un criterio JavaScript denominato JS- SetTargetURL come segue: target.url : https://mocktarget.apigee.net?json

  9. Tieni presente che il valore in target.url ha i seguenti componenti:
    • schema: https
    • autorità: mocktarget.apigee.net
    • percorso: ?json
  10. Poiché il componente path inizia con un punto interrogativo (?) invece di una barra (/), ricevi l'errore Invalid request path.
  11. Vai alla fase AX (dati registrati di Analytics) della traccia e fai clic su quest'ultima.
  12. Scorri verso il basso fino alla sezione Dettagli fase - Intestazioni degli errori e determina il i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:

  13. Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source. come protocol.http.BadPath e target rispettivamente, che indica che questo errore è causato dall'URL del server di backend ha un percorso non valido.

    Intestazioni della risposta Valore
    X-Apigee-fault-code protocol.http.BadPath
    X-Apigee-fault-source target

NGINX

Procedura 3: usare i log di accesso NGINX

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare le informazioni chiave su HTTP 500 Internal Server Error.
  2. Controlla i log di accesso NGINX:

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

  3. Cerca per vedere se ci sono errori 500 con codice di errore protocol.http.BadPath per un periodo di tempo specifico (se il problema si è verificato nel precedenti) o se ci sono ancora richieste che non vanno a buon fine con 500.
  4. Se trovi errori 500 con la corrispondenza X-Apigee-fault-code il valore di protocol.http.BadPath, quindi determina il valore di X- Origine-guasto di Apigee.

    Esempio di errore 500 nel log di accesso NGINX:

    La voce di esempio riportata sopra dal log di accesso NGINX ha i seguenti valori per X-Apigee- codice di errore e fonte-fault-X-Apigee:

    Intestazioni Valore
    X-Apigee-fault-code protocol.http.BadPath
    X-Apigee-fault-source target

    Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source sono protocol.http.BadPath e target rispettivamente, per indicare che questo errore è causato dall'URL del server di backend presenta un percorso non valido.

Causa: il percorso dell'URL del server di backend (target.url) non è valido

Diagnosi

  1. Determina il codice di errore e l'origine errore per 500 Internal Server Error utilizzando i log di accesso di API Monitoring, Trace Tool o NGINX, come spiegato in Passaggi di diagnostica comuni.
  2. Se il Codice di errore è protocol.http.BadPath e Origine errore ha il valore target, questo indica che nell'URL del server di backend è presente un valore non valido del tuo percorso di apprendimento.
  3. L'URL del server di backend è rappresentato dalla variabile di flusso target.url in Apigee perimetrali. Questo errore in genere si verifica se provi ad aggiornare l'URL del server di backend (target.url) in modo dinamico usare uno qualsiasi dei criteri (all'interno proxy/flusso condiviso) nel flusso di richieste di destinazione, in modo che abbia un percorso non valido.

  4. Determina se la variabile di flusso target.url ha effettivamente un valore non valido path e l'origine del valore utilizzando uno dei seguenti metodi:

    Trace

    Utilizzo dello strumento Trace

    Se hai acquisito una traccia per questo errore, segui la procedura descritta in Utilizzo dello strumento Trace e

    1. Verifica se target.url ha un percorso non valido, ovvero se inizia con un punto interrogativo (?) anziché una barra (/).
    2. In caso affermativo, verifica il criterio che ha modificato o aggiornato il valore target.url contenere un percorso non valido.

      Traccia di esempio che mostra che il criterio JavaScript ha aggiornato la variabile di flusso target.url

    3. Nella traccia di esempio precedente, nota che il criterio JavaScript ha modificato o aggiornato il valore di target.url in modo che contenga un percorso non valido.
    4. Tieni presente che target.url include i seguenti componenti:
      • schema: https
      • autorità: mocktarget.apigee.net
      • percorso: ?json

      Il percorso inizia con un punto interrogativo (?) invece che una avanti barra (/), quindi non è valida.

    Log

    Utilizzo dei log nel server di log

    1. Se non riesci a trovare alcuna traccia per questo errore (si è verificato un problema intermittente), verifica se hai registrato le informazioni sul valore della variabile di flusso target.url, utilizzando criteri come MessageLogging o ServiceCallout al server di log.
    2. Se disponi dei log, esaminali e
      1. Verifica se target.url ha un percorso non valido e
      2. Verificare se è possibile determinare le informazioni relative alle norme modificate target.url contenere un percorso non valido

    proxy API

    Revisione del proxy API che presenta errori

    Se non disponi di traccia o log per questo errore, esamina l'API con errori proxy per determinare cosa ha modificato o aggiornato la variabile di flusso target.url per contenere un percorso non valido. Controlla quanto segue:

    • Il criterio all'interno del proxy API
    • Eventuali flussi condivisi richiamati dal proxy
  5. Esamina attentamente il criterio specifico (ad esempio AssegnaMessage o JavaScript) che modifica o aggiorna la variabile di flusso target.url e determina la causa aggiornamento di target.url in modo che abbia un percorso non valido.

    Ecco alcuni esempi di criteri che aggiornano la variabile di flusso target.url non è corretto contenere un percorso non valido che porta a questo errore.

    Esempio 1

    Esempio 1: aggiornamento del criterio JavaScript di target.url variabile

    var url = "https://mocktarget.apigee.net?json"
    context.setVariable("target.url", url);
    

    Nell'esempio riportato sopra, tieni presente che la variabile di flusso target.url viene aggiornata con il valore https://mocktarget.apigee.net?json contenuto in un altro variabile url.

    Tieni presente che il valore dell'elemento url ha i seguenti componenti:

    • schema: https
    • autorità: mocktarget.apigee.net
    • percorso: ?json

    Il percorso inizia con un punto interrogativo (?) anziché una barra. (/), che non è valida. Pertanto, Apigee Edge restituisce 500 Internal Server Error con codice di errore protocol.http.BadPath.

    Esempio 2

    Esempio 2: aggiornamento del criterio JavaScript di target.url variabile in base al valore nell'intestazione della richiesta

    var path = context.getVariable("request.header.Path");
    var url = "https://mocktarget.apigee.net" + path
    context.setVariable("target.url", url);
    

    Nell'esempio precedente, nota che la variabile di flusso target.url viene aggiornata concatenando il valore https://mocktarget.apigee.net contenuto in un la variabile url e il valore di un'altra variabile path, il cui valore viene recuperato da request.header.Path.

    Se hai accesso alla traccia o alla richiesta effettiva, puoi verificare il valore effettivo passato a request.header.Path.

    Esempio di richiesta effettuata dall'utente

    curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
    

    In questo esempio, il percorso dell'intestazione non viene inviato come parte della richiesta. Di conseguenza, il valore della variabile path nel criterio JavaScript è null.

    Pertanto:

    • url = https://mocktarget.apigee.net + path
    • url = https://mocktarget.apigee.net + "?user"
    • target.url = https://mocktarget.apigee.net?user

    Tieni presente che il valore dell'elemento target.url ha i seguenti componenti:

    • schema: https
    • autorità: mocktarget.apigee.net
    • percorso: ?user

    Il percorso inizia con un punto interrogativo (?) anziché una barra. (/), che non è valida. Pertanto, Apigee Edge restituisce 500 Internal Server Error con il codice di errore protocol.http.BadPath.

    Esempio 3

    Esempio 3: criterioAssignMessage in aggiornamento della variabile target.url

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

    Tieni presente che il valore di url ha i seguenti componenti:

    • schema: https
    • autorità: mocktarget.apigee.net
    • percorso: ?echo

    Anche in questo esempio, il percorso inizia con un punto interrogativo (?) invece di una barra (/), che non è valida. Pertanto, Apigee Edge restituisce 500 Internal Server Error con codice di errore protocol.http.BadPath.

Risoluzione

In base alla specifica dell'URL RFC 3986, sezione 3: componenti di sintassi, il componente path è obbligatorio e DEVE iniziare sempre con "/". Per risolvere il problema, procedi nel seguente modo:

  1. Assicurati che l'URL del server di backend, rappresentato dalla variabile di flusso target.url ha sempre un percorso valido e inizia sempre con un barra obliqua (/).
    1. In alcuni casi, potresti non avere un nome risorsa nel percorso, quindi assicurati che il valore il percorso contiene almeno una barra (/).
    2. Se utilizzi altre variabili per determinare il valore della variabile di flusso target.url, poi assicurati che altre variabili non abbiano un percorso non valido.
    3. Se esegui operazioni con le stringhe per determinare il valore della variabile di flusso target.url, quindi assicurati che il risultato della stringa non ha un percorso non valido.
  2. Negli esempi descritti sopra, puoi risolvere il problema come spiegato di seguito:

    Esempio 1

    Esempio 1: aggiornamento del criterio JavaScript di target.url variabile

    Utilizza una barra (/) anziché un punto interrogativo (?) nella url per risolvere il problema, come mostrato di seguito:

    var url = "https://mocktarget.apigee.net/json"
    context.setVariable("target.url", url);
    

    Esempio 2

    Esempio 2: aggiornamento del criterio JavaScript di target.url variabile in base al valore nell'intestazione della richiesta

    var path = context.getVariable("request.header.Path");
    var url = "https://mocktarget.apigee.net" + path
    context.setVariable("target.url", url);
    

    Assicurati di trasmettere un percorso valido, ad esempio /user, come parte della richiesta intestazione Path per risolvere il problema, come illustrato di seguito:

    Esempio di richiesta:

    curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
    

    Esempio 3

    Esempio 3: aggiornamento del criterio AssegnaMessage per l'aggiornamento di target.url

    Aggiungi un percorso valido nell'elemento <Value> del criterioAssignMessage. Vale a dire, sostituisci il punto interrogativo (?) con una barra obliqua (/) nell'elemento <Value> e impostalo su https://mocktarget.apigee.net/echo per risolvere il problema, come mostrato di seguito:

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

    Specifica

    Apigee Edge si aspetta che il path componente nell'URL del server di backend DEVE sempre iniziare con una barra (/) , come indicato di seguito specifiche:

    Specifica
    RFC 3986, sezione 3: componenti di sintassi
    RFC 3986, sezione 3.3: Percorso

    Se hai ancora bisogno di aiuto dall'assistenza Apigee, vai a Devo raccogliere informazioni diagnostiche.

    Raccogliere dati diagnostici

    Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli i seguenti dati informazioni diagnostiche e contattare l'assistenza Apigee Edge:

    Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:

    • Nome organizzazione
    • Nome ambiente
    • Nome proxy API
    • Completa il comando curl utilizzato per riprodurre l'errore 500 Internal Server Error con il codice di errore protocol.http.BadPath
    • File di traccia per le richieste API

    Se sei un utente di Private Cloud, fornisci le seguenti informazioni:

    • Messaggio di errore completo osservato per le richieste non riuscite
    • Nome ambiente
    • Bundle proxy API
    • File di traccia per le richieste API
    • Log di accesso NGINX:

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

      Dove: ORG, ENV e PORT# vengono sostituiti con valori effettivi.

    • Log di sistema del processore di messaggi /opt/apigee/var/log/edge-message- processor/logs/system.log

    Riferimenti

    Variabili di flusso - Target