Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 500 Internal Server Error
con il codice di errore protocol.http.BadPath
come risposta per le chiamate API.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 500 Internal Server Error
Inoltre, potresti 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 path
che inizia con un punto interrogativo (?
) anziché una barra (/
), che non è valida.
In base alle specifiche RFC 3986, sezione 3: componenti di sintassi e RFC 3986, sezione 3.3: percorso:
La sintassi URI ha i seguenti componenti:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
- Il componente
path
è obbligatorio, DEVE iniziare con una barra (/
) e avere sempre una barra.
Di conseguenza, se l'URL della richiesta del server di backend ha un componente path
che inizia con un punto interrogativo (?
) anziché una barra (/
), Apigee Edge risponde con 500 Internal Server Error
e il codice di errore protocol.http.BadPath
.
Ad esempio, se target.url
ha il valore https://www.mocktarget.apigee.net?json
, si verifica questo errore quando path
risulta non valido, dal momento che inizia con un punto interrogativo (?
) anziché una barra (/
).
Causa | Descrizione | Istruzioni per la 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é una barra (/ ). |
Utenti di cloud pubblico e privato perimetrale |
Passaggi di diagnosi più 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 il monitoraggio delle API:
- Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai alla pagina Analizza > Monitoraggio API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
Traccia Codice di errore su Ora.
Seleziona una cella con il codice di errore
protocol.http.BadPath
come mostrato di seguito:Le informazioni sul codice di errore
protocol.http.BadPath
vengono visualizzate come mostrato di seguito:Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.
- Nella finestra Log, prendi nota dei seguenti dettagli:
- Codice di stato:
500
- Origine errore:
target
- Codice di errore:
protocol.http.BadPath
- Codice di stato:
- Se l'Origine dell'errore è
target
e il Codice di errore èprotocol.http.BadPath
, ciò indica che l'URL del server di backend ha un percorso non valido.
Traccia
Procedura 2: utilizzo dello strumento Trace
Per diagnosticare l'errore utilizzando lo strumento Trace:
- Abilita 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
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le FlowInfos sia abilitata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
Generalmente l'errore viene visualizzato in un flusso successivo alla fase Flusso di richiesta target , come mostrato di seguito:
Prendi nota del valore dell'errore dalla traccia:
error: Percorso di richiesta non valido
Poiché l'errore viene generato da Apigee Edge dopo la fase Inizio del flusso di richieste target, indica che l'URL del server di backend ha un percorso non valido. Ciò si verifica molto probabilmente se la variabile di flusso
target.url
(che rappresenta l'URL per il server di backend) in Apigee Edge potrebbe essere stata aggiornata con un percorso non valido tramite uno dei criteri nel flusso di richieste di destinazione.- Esamina la sezione Variabili lette e assegnate in ogni flusso a ritroso, dal flusso di errori alla fase Flusso di richieste target avviato.
- Determina il criterio in cui è stata aggiornata la variabile di flusso
target.url
:La traccia di esempio che mostra il criterio JavaScript ha aggiornato la variabile di flusso
target.url:
Nella traccia di esempio mostrata sopra, tieni presente che il valore della variabile della variabile di flusso
target.url
viene aggiornato in un criterio JavaScript denominatoJS- SetTargetURL
come segue:target.url : https://mocktarget.apigee.net?json
- Tieni presente che il valore in
target.url
ha i seguenti componenti:- schema:
https
- autorità:
mocktarget.apigee.net
- percorso:
?json
- schema:
- Poiché il componente percorso inizia con un punto interrogativo (
?
) anziché una barra (/
), viene visualizzato l'erroreInvalid request path
. - Vai alla fase AX (Analytics Data Recorded) della traccia e fai clic.
Scorri verso il basso fino alla sezione Dettagli fase - Intestazioni degli errori e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:
Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source come
protocol.http.BadPath
etarget
, rispettivamente, che indicano che questo errore è causato dal fatto che l'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: utilizzo dei log degli accessi di NGINX
Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave su HTTP
500 Internal Server Error
. Controlla i log degli accessi di NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Cerca per vedere se si sono verificati errori
500
con il codice di erroreprotocol.http.BadPath
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con500
. Se riscontri errori
500
con X-Apigee-fault-code corrispondente al valore diprotocol.http.BadPath
, determina il valore di X- Apigee-fault-source.Esempio di errore 500 dal log degli accessi di NGINX:
La voce di esempio sopra riportata dal log degli accessi di NGINX ha i seguenti valori per X-Apigee- fault-code e X-Apigee-fault-source:
Intestazioni Valore X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
Nota che i valori di X-Apigee-fault-code e X-Apigee-fault-source sono rispettivamente
protocol.http.BadPath
etarget
, indicando che questo errore è causato dal fatto che l'URL del server di backend ha un percorso non valido.
Causa: il percorso dell'URL del server di backend (target.url) non è valido
Diagnostica
- Determina il codice di errore e l'origine dell'errore per
500 Internal Server Error
utilizzando il monitoraggio delle API, lo strumento Trace o i log degli accessi NGINX, come spiegato nella sezione Passaggi comuni della diagnostica. - Se il codice di errore è
protocol.http.BadPath
e l'origine dell'errore ha il valoretarget
, significa che l'URL del server di backend ha un percorso non valido. L'URL del server di backend è rappresentato dalla variabile di flusso
target.url
in Apigee Edge. Questo errore si verifica in genere se provi ad aggiornare l'URL del server di backend (target.url
) in modo dinamico utilizzando uno dei criteri (all'interno del proxy o del flusso condiviso) nel flusso di richieste di destinazione, in modo che abbia un percorso non valido.Determina se la variabile di flusso
target.url
ha effettivamente un percorso non valido e l'origine del relativo valore utilizzando uno dei seguenti metodi:Traccia
Utilizzare lo strumento Trace
Se hai acquisito una traccia per questo errore, segui i passaggi descritti in Utilizzare lo strumento Trace e
- Verifica che
target.url
abbia un percorso non valido, ossia che inizi con un punto interrogativo (?
) anziché una barra (/
). In caso affermativo, scopri il criterio che ha modificato o aggiornato il valore di
target.url
affinché contenga un percorso non valido.La traccia di esempio che mostra il criterio JavaScript ha aggiornato la variabile di flusso
target.url
- 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. - Tieni presente che
target.url
include i seguenti componenti:- schema:
https
- autorità:
mocktarget.apigee.net
- percorso:
?json
Il percorso inizia con un punto interrogativo (
?
) anziché una barra (/
), quindi non è valido. - schema:
Log
Utilizzo dei log nel server di log
- Se non disponi di una traccia per questo errore (un problema intermittente), controlla se
hai registrato le informazioni sul valore della variabile di flusso
target.url
, utilizzando criteri come MessageLogging o ServiceCallout nel server di log. - Se disponi dei log, esaminali e
- Verifica che il percorso di
target.url
non sia valido. - Verifica se riesci a determinare le informazioni su quale criterio è stato modificato
target.url
in modo che contenga un percorso non valido
- Verifica che il percorso di
proxy API
Revisione del proxy API con errori
Se non disponi di una traccia o di log per questo errore, esamina il proxy API con errori per determinare che cosa ha modificato o aggiornato la variabile di flusso
target.url
in modo che contenga un percorso non valido. Controlla quanto segue:- Il criterio all'interno del proxy API
- Eventuali flussi condivisi richiamati dal proxy
- Verifica che
Esamina attentamente il criterio specifico (ad esempio: AssignMessage o JavaScript) che modifica o aggiorna la variabile di flusso
target.url
e determina la causa dell'aggiornamento ditarget.url
affinché abbia un percorso non valido.Di seguito sono riportati alcuni criteri di esempio che aggiornano erroneamente la variabile di flusso
target.url
in modo da contenere un percorso non valido che genera questo errore.Esempio 1
Esempio 1: criterio JavaScript che aggiorna la variabile
target.url
var url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Nell'esempio precedente, tieni presente che la variabile di flusso
target.url
viene aggiornata con il valorehttps://mocktarget.apigee.net?json
contenuto in un'altra variabileurl.
Tieni presente che il valore di
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. Di conseguenza, Apigee Edge restituisce500 Internal Server Error
con il codice di erroreprotocol.http.BadPath
.Esempio 2
Esempio 2: criterio JavaScript che aggiorna la variabile
target.url
in base al valore nell'intestazione della richiestavar 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 valorehttps://mocktarget.apigee.net
contenuto in una variabileurl
e il valore di un'altra variabilepath
, il cui valore viene recuperato darequest.header.Path.
Se hai accesso alla richiesta o alla traccia effettiva, puoi verificare il valore effettivo trasmesso 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 di
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. Quindi, Apigee Edge restituisce500 Internal Server Error
con il codice di erroreprotocol.http.BadPath
.Esempio 3
Esempio 3: criterio di AssegnaMessage che aggiorna la 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 (
?
) anziché una barra (/
), che non è valida. Di conseguenza, Apigee Edge restituisce500 Internal Server Error
con il codice di erroreprotocol.http.BadPath
.- schema:
Risoluzione
Secondo la specifica degli URL
RFC 3986, sezione 3: componenti di sintassi, il componente path
è obbligatorio e DEVE iniziare sempre con "/". Per risolvere il problema, segui i passaggi riportati di seguito:
- Assicurati che l'URL del server di backend, rappresentato dalla variabile di flusso
target.url
, abbia sempre un percorso valido e inizi sempre con una barra (/
).- In alcuni casi, potresti non avere un nome di risorsa nel percorso, quindi assicurati che il percorso abbia almeno una barra (
/
). - Se utilizzi altre variabili per determinare il valore della variabile di flusso
target.url
, assicurati che le altre variabili non abbiano un percorso non valido. - Se esegui operazioni sulle stringhe per determinare il valore della variabile di flusso
target.url
, assicurati che il risultato o il risultato delle operazioni stringa non abbia un percorso non valido.
- In alcuni casi, potresti non avere un nome di risorsa nel percorso, quindi assicurati che il percorso abbia almeno una barra (
Negli esempi illustrati sopra, puoi risolvere il problema come spiegato di seguito:
Esempio 1
Esempio 1: criterio JavaScript che aggiorna la variabile
target.url
Utilizza una barra (
/
) anziché un punto interrogativo (?
) nella variabileurl
per risolvere il problema, come illustrato di seguito:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Esempio 2
Esempio 2: criterio JavaScript che aggiorna la variabile
target.url
in base al valore nell'intestazione della richiestavar 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
nell'intestazione della richiestaPath
, per risolvere il problema come mostrato di seguito:Esempio di richiesta:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Esempio 3
Esempio 3: criterio di AssegnaMessage che aggiorna la variabile
target.url
Aggiungi un percorso valido nell'elemento
<Value>
del criterio AssegnaMessage. In altre parole, sostituisci il punto interrogativo (?
) con una barra (/
) nell'elemento<Value>
e impostalo suhttps://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>
Specifiche
Apigee Edge prevede che il
path
componente nell'URL del server di backend DEVE iniziare sempre con una barra (/
) in base alle seguenti specifiche:Specifiche RFC 3986, sezione 3: componenti di sintassi RFC 3986, sezione 3.3: percorso Se hai ancora bisogno di aiuto dall'Assistenza Apigee, vai a Devi raccogliere informazioni diagnostiche.
Devi raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome dell'organizzazione.
- Nome ambiente
- Nome proxy API
- Comando
curl
completo utilizzato per riprodurre500 Internal Server Error
con il codice di erroreprotocol.http.BadPath
- File di traccia per le richieste API
Se sei un utente Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome ambiente
- Bundle di proxy API
- File di traccia per le richieste API
Log degli accessi NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.
- Log di sistema del processore di messaggi
/opt/apigee/var/log/edge-message- processor/logs/system.log
Riferimenti