Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
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 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.
Come da specifiche RFC 3986, sezione 3: Componenti della sintassi e RFC 3986, sezione 3.3: Percorso:
La sintassi URI è costituita dai seguenti componenti:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment- Il componente
pathè obbligatorio e DEVE iniziare con 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 (/), 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 perché
path risulta non valido,in quanto inizia con un punto interrogativo
(?) anziché con 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é con una barra (/). |
Utenti di Edge Public e Private Cloud |
Passaggi di diagnostica 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:
- 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 osservato gli errori.
Traccia il codice di errore rispetto al tempo.
Seleziona una cella con il codice di errore
protocol.http.BadPath, come mostrato di seguito:
Le informazioni sul codice di errore
protocol.http.BadPathvengono 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 del guasto:
target - Codice guasto:
protocol.http.BadPath
- Codice di stato:
- Se l'origine dell'errore è
targete il codice di errore èprotocol.http.BadPath, significa che l'URL del server di backend ha un percorso non valido.
Traccia
Procedura n. 2: utilizzo dello strumento Trace
Per diagnosticare l'errore utilizzando lo strumento Trace:
- Attiva l'opzione Traccia sessione e
- Attendi che si verifichi l'errore
500 Internal Server Erroroppure - Se riesci a riprodurre il problema, effettua la chiamata API per riprodurlo
500 Internal Server Error
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le informazioni sul flusso sia abilitata:

- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, l'errore si verifica in un flusso dopo la fase Target Request Flow Started , come mostrato di seguito:

Prendi nota del valore dell'errore dalla traccia:
error: Invalid request path
Poiché l'errore viene generato da Apigee Edge dopo la fase Target Request Flow Started, 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 è stata aggiornata con un percorso non valido tramite una delle policy nel flusso di richieste di destinazione.- Esamina la sezione Variabili lette e assegnate in ciascun flusso a ritroso dal flusso di errore alla fase Flusso di richiesta di destinazione avviato.
- Determina la policy in cui è stata aggiornata la variabile di flusso
target.url:Esempio di traccia che mostra la variabile di flusso aggiornata dal criterio JavaScript
target.url:
Nella traccia di esempio mostrata sopra, nota che il valore della variabile di flusso
target.urlviene aggiornato in un criterio JavaScript denominatoJS- SetTargetURLcome segue:target.url : https://mocktarget.apigee.net?json - Tieni presente che il valore in
target.urlha i seguenti componenti:- scheme:
https - authority:
mocktarget.apigee.net - path:
?json
- scheme:
- Poiché il componente percorso inizia con un punto interrogativo (
?) anziché con una barra (/), viene visualizzato l'erroreInvalid request path. - Vai alla fase AX (dati di Analytics registrati) nella traccia e fai clic.
Scorri verso il basso fino alla sezione Dettagli fase - Intestazioni errori e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:

Verranno visualizzati i valori di X-Apigee-fault-code e X-Apigee-fault-source come
protocol.http.BadPathetargetrispettivamente, a indicare 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.BadPathX-Apigee-fault-source target
NGINX
Procedura n. 3: utilizzo dei log di accesso NGINX
Per diagnosticare l'errore utilizzando i log di accesso NGINX:
- Se sei un utente di Private Cloud, puoi utilizzare i log di accesso NGINX per determinare
le informazioni chiave su HTTP
500 Internal Server Error. Controlla i log di accesso di NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Cerca se sono presenti errori
500con codice di erroreprotocol.http.BadPathdurante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste ancora non riuscite con500. Se trovi errori
500con X-Apigee-fault-code corrispondente al valore diprotocol.http.BadPath, determina il valore di X- Apigee-fault-source.Esempio di errore 500 dal log di accesso NGINX:
La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X-Apigee- fault-code e X-Apigee-fault-source:
Intestazioni Valore X-Apigee-fault-code protocol.http.BadPathX-Apigee-fault-source targetNota che i valori di X-Apigee-fault-code e X-Apigee-fault-source sono
protocol.http.BadPathetargetrispettivamente, il che indica che questo errore è causato dal fatto che l'URL del server di backend ha un percorso non valido.
Causa: l'URL del server di backend (target.url) ha un percorso non valido
Diagnosi
- Determina il codice di errore e l'origine dell'errore per
500 Internal Server Errorutilizzando API Monitoring, Trace Tool o i log di accesso NGINX come spiegato in Passaggi comuni per la diagnosi. - Se il codice di errore è
protocol.http.BadPathe 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.urlin Apigee Edge. Questo errore si verifica in genere se tenti di aggiornare l'URL del server di backend (target.url) dinamicamente utilizzando uno qualsiasi dei criteri (all'interno del flusso proxy/condiviso) nel flusso della richiesta di destinazione, in modo che abbia un percorso non valido.Determina se la variabile di flusso
target.urlha effettivamente un percorso non valido e la sorgente del suo valore utilizzando uno dei seguenti metodi:Traccia
Utilizzo dello strumento Trace
Se hai acquisito una traccia per questo errore, segui i passaggi descritti in Utilizzo dello strumento Trace e
- Verifica se
target.urlha un percorso non valido, ovvero se inizia con un punto interrogativo (?) anziché una barra (/). In caso affermativo, scopri il criterio che ha modificato o aggiornato il valore di
target.urlin modo che contenga un percorso non valido.Esempio di traccia che mostra la variabile di flusso aggiornata dal criterio JavaScript
target.url
- Nella traccia di esempio riportata sopra, nota che la policy JavaScript ha modificato o aggiornato il valore di
target.urlin modo che contenga un percorso non valido. - Tieni presente che
target.urlè composto dai seguenti componenti:- scheme:
https - authority:
mocktarget.apigee.net - path:
?json
Il percorso inizia con un punto interrogativo (
?) anziché una barra (/), pertanto non è valido. - scheme:
Log
Utilizzare i log nel server di log
- Se non hai una traccia di questo errore (un problema intermittente), verifica se
hai registrato le informazioni sul valore della variabile di flusso
target.urlutilizzando criteri come MessageLogging o ServiceCallout nel tuo server di log. - Se hai i log, esaminali e
- Verifica se
target.urlha un percorso non valido e - Verifica se riesci a determinare le informazioni sulla norma modificata
target.urlin modo che contenga un percorso non valido
- Verifica se
Proxy API
Esaminare il proxy API non riuscito
Se non disponi di una traccia o di log per questo errore, esamina il proxy API non riuscito per determinare cosa ha modificato o aggiornato la variabile di flusso
target.urlin modo che contenga un percorso non valido. Controlla quanto segue:- Il criterio all'interno del proxy API
- Tutti i flussi condivisi richiamati dal proxy
- Verifica se
Esamina attentamente la policy specifica (ad esempio AssignMessage o JavaScript) che modifica o aggiorna la variabile di flusso
target.urle determina la causa dell'aggiornamento ditarget.urlin modo che abbia un percorso non valido.Ecco alcuni esempi di criteri che aggiornano la variabile di flusso
target.urlin modo errato in modo che contenga un percorso non valido che genera questo errore.Esempio 1
Esempio 1: variabile
target.urldi aggiornamento delle norme JavaScriptvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
Nell'esempio precedente, nota che la variabile di flusso
target.urlviene aggiornata con il valorehttps://mocktarget.apigee.net?jsoncontenuto in un'altra variabileurl.Tieni presente che il valore di
urlè composto dai seguenti componenti:- scheme:
https - authority:
mocktarget.apigee.net - path:
?json
Il percorso inizia con un punto interrogativo (
?) anziché una barra (/), che è non valido. Pertanto, Apigee Edge restituisce500 Internal Server Errorcon il codice di erroreprotocol.http.BadPath.Esempio 2
Esempio n. 2: aggiornamento della variabile
target.urldella policy JavaScript 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.urlviene aggiornata concatenando il valorehttps://mocktarget.apigee.netcontenuto in una variabileurle 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.Richiesta di esempio 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. Pertanto, il valore della variabile
pathnel criterio JavaScript ènull.Pertanto:
url = https://mocktarget.apigee.net + pathurl = https://mocktarget.apigee.net + "?user"target.url = https://mocktarget.apigee.net?user
Tieni presente che il valore di
target.urlè composto dai seguenti componenti:- scheme:
https - authority:
mocktarget.apigee.net - path:
?user
Il percorso inizia con un punto interrogativo (
?) anziché una barra (/), che è non valido. Pertanto, Apigee Edge restituisce500 Internal Server Errorcon il codice di erroreprotocol.http.BadPath.Esempio n. 3
Esempio 3: aggiornamento della variabile
target.urldel criterio AssignMessage<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è composto dai seguenti componenti:- scheme:
https - authority:
mocktarget.apigee.net - path:
?echo
Anche in questo esempio, il percorso inizia con un punto interrogativo (
?) anziché con una barra (/), che è non valido. Pertanto, Apigee Edge restituisce500 Internal Server Errorcon il codice di erroreprotocol.http.BadPath.- scheme:
Risoluzione
Come da specifica dell'URL
RFC 3986, sezione 3: Componenti della sintassi, il componente path è obbligatorio
e DEVE sempre iniziare 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 risorsa nel percorso, quindi assicurati che
il percorso contenga 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 l'esito delle operazioni sulle stringhe non abbia un percorso non valido.
- In alcuni casi, potresti non avere un nome risorsa nel percorso, quindi assicurati che
il percorso contenga almeno una barra (
Negli esempi discussi in precedenza, puoi risolvere il problema come spiegato di seguito:
Esempio 1
Esempio 1: variabile
target.urldi aggiornamento delle norme JavaScriptUtilizza una barra (
/) anziché un punto interrogativo (?) nella variabileurlper risolvere il problema, come mostrato di seguito:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Esempio 2
Esempio n. 2: aggiornamento della variabile
target.urldella policy JavaScript 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 superare un percorso valido, ad esempio
/usercome parte dell'intestazione della richiestaPathper risolvere il problema come mostrato di seguito:Richiesta di esempio:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Esempio n. 3
Esempio 3: aggiornamento della variabile
target.urldella norma AssignMessageAggiungi un percorso valido nell'elemento
<Value>del criterio AssignMessage. ovvero sostituisci il punto interrogativo (?) con una barra (/) nell'elemento<Value>e impostalo suhttps://mocktarget.apigee.net/echoper 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 prevede che il
pathcomponente nell'URL del server di backend DEVE sempre iniziare con una barra (/) come da seguenti specifiche:Specifica RFC 3986, sezione 3: Componenti della sintassi RFC 3986, sezione 3.3: Path Se hai ancora bisogno di assistenza da parte dell'assistenza Apigee, vai a Informazioni di diagnostica da raccogliere.
Deve raccogliere informazioni diagnostiche
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza Apigee Edge:
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome del proxy API
- Completa il comando
curlutilizzato per riprodurre500 Internal Server Errorcon il codice di erroreprotocol.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_logDove: 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