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.EmptyPath
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":"Request path cannot be empty", "detail":{ "errorcode":"protocol.http.EmptyPath" } } }
Possibili cause
Questo errore si verifica se l'URL della richiesta del server di backend, rappresentato dalla variabile di flusso
target.url
, contiene un percorso vuoto.
In base alle specifiche RFC 3986, sezione 3: Componenti di sintassi e . RFC 3986, sezione 3.3: Percorso:
La sintassi URI include i seguenti componenti:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
- Il componente
path
è obbligatorio e DEVE contenere sempre una barra (/
), anche se nel percorso non sono presenti altri caratteri.
Di conseguenza, se l'URL della richiesta del server di backend non presenta la classe path
del componente, ovvero non ha nemmeno una barra (/
), Apigee
Edge risponde con 500 Internal Server Error
e codice di errore
protocol.http.EmptyPath
.
Ad esempio: se target.url
ha il valore
https://www.mocktarget.apigee.net
, questo errore si verifica quando
path
il componente è vuoto o mancante.
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
L'URL del server di backend (target.url) ha un percorso vuoto | L'URL del server di backend rappresentato dalla variabile di flusso target.url ha un percorso vuoto. |
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:
- Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai al menu Analizza > Monitoraggio delle API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
Traccia il codice di errore in base all'ora.
Seleziona una cella con il codice di errore
protocol.http.EmptyPath
, come mostrato di seguito:Le informazioni sul codice di errore
protocol.http.EmptyPath
vengono visualizzate come come mostrato di seguito:Fai clic su Visualizza log per espandere la riga della richiesta non riuscita.
- Nella finestra Log, tieni presente i seguenti dettagli:
- .
- Codice di stato:
500
- Origine errore:
target
- Codice di errore:
protocol.http.EmptyPath
- Codice di stato:
- Se Origine di errore è
target
e Codice di errore èprotocol.http.EmptyPath
, questo indica che l'URL del server di backend ha un un percorso vuoto.
Trace
Procedura 2: utilizzo dello strumento Trace
Per diagnosticare l'errore utilizzando lo strumento Trace:
- 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
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Naviga attraverso le diverse fasi della traccia e individua dove si è verificato l'errore.
In genere troverai l'errore in un flusso successivo alla procedura di avvio del flusso di richiesta target come illustrato di seguito:
Prendi nota del valore dell'errore della traccia.
errore: il percorso della richiesta non può essere vuoto
Poiché l'errore viene generato da Apigee Edge dopo la fase Target Request Flow Started, indica che il valore
path
nell'URL del server di backend è vuoto. Questo potrebbe si verificano molto probabilmente se la variabile di flussotarget.url
(che rappresenta l'URL per server di backend) potrebbe essere stato aggiornato con un percorso vuoto attraverso uno dei criteri nella nel flusso di richiesta.- Esamina la sezione Variabili lette e assegnate in ciascuno dei flussi a ritroso dal verso la fase Flusso di richiesta target avviato.
Determina il criterio in cui viene aggiornata la variabile di flusso
target.url
.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 SetTargetURL come che segue:target.url : https://mocktarget.apigee.net
- Tieni presente che
target.url
include i seguenti componenti:- schema:
https://mocktarget.apigee.net
- path: vuoto
- schema:
- Di conseguenza, viene restituito l'errore
Request path cannot be empty
. - Vai alla fase AX (dati registrati di Analytics) della traccia e fai clic su quest'ultima.
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:
- Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source come.
protocol.http.EmptyPath
etarget
rispettivamente, per indicare che questo errore è dovuto al fatto che l'URL del server di backend ha un percorso vuoto.Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.EmptyPath
X-Apigee-fault-source target
NGINX
Procedura 3: utilizzo dei log di accesso NGINX
Per diagnosticare l'errore utilizzando i log di accesso NGINX:
- Se sei un utente 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 NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Cerca per vedere se ci sono errori
500
con codice di erroreprotocol.http.EmptyPath
per un periodo di tempo specifico (se il problema si è verificato tra nel passato) o se ci sono richieste che non vanno ancora a buon fine con500
. Se trovi errori
500
con la corrispondenza X-Apigee-fault-code il valore diprotocol.http.EmptyPath
, quindi determina il valore X-Apigee-fault-source.Esempio di errore 500 nel log di accesso NGINX:
La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X- Codice di errore Apigee e fonte-fault-X-Apigee:
Intestazioni Valore X-Apigee-fault-code protocol.http.EmptyPath
X-Apigee-fault-source target
Tieni presente che i valori di X-Apigee-fault-code e X-Apigee-fault-source sono
protocol.http.EmptyPath
etarget
rispettivamente, per indicare che questo errore è causato dall'esistenza di un percorso vuoto dell'URL del server di backend.
Causa: il percorso dell'URL del server di backend (target.url) è vuoto
Diagnosi
- 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. - Se il Codice di errore è
protocol.http.EmptyPath
e Origine errore ha il valoretarget
, questo indica che l'URL del server di backend ha un del tuo percorso di apprendimento. 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, ovverotarget.url
in modo dinamico usando uno qualsiasi dei criteri (all'interno proxy/flusso condiviso) nel flusso di richiesta di destinazione, in modo che abbia un percorso vuoto.- Determina se la variabile di flusso
target.url
ha un percorso vuoto e utilizzando uno dei seguenti passaggi:Trace
Utilizzo dello strumento Trace
Se hai acquisito una traccia per questo errore, segui la procedura descritta in Utilizzo dello strumento Trace e:
- Verifica se
target.url
ha un percorso vuoto. In caso affermativo, scopri quale criterio ha modificato o aggiornato il valore
target.url
contenente un percorso vuoto.Traccia di esempio che mostra che il criterio JavaScript ha aggiornato la variabile di flusso
target.url:
- Nella traccia di esempio precedente, nota che il criterio JavaScript è stato modificato o
ha aggiornato il valore di
target.url
in modo che contenga un percorso vuoto. - Tieni presente che
target.url
include i seguenti componenti:- schema:
https://mocktarget.apigee.net
- path: vuoto
- schema:
Log
Utilizzo dei log nel server di log
- Se non riesci a trovare alcuna traccia per questo errore (problema intermittente), controlla
verifica di aver registrato le informazioni sul valore della variabile di flusso
target.url
, utilizzando criteri come MessageLogging o ServiceCallout al server di log. - Se disponi dei log, esaminali e:
- Verifica se
target.url
ha un percorso vuoto e - Verifica se riesci a determinare quale criterio ha modificato
target.url
a contenere un percorso vuoto
- Verifica se
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
- Verifica se
Esamina il criterio specifico (ad esempio, AssignMessage o JavaScript) che modifica o aggiorna attentamente la variabile di flusso
target.url
e determina la causa dell'aggiornamentotarget.url
per avere un percorso vuoto.Ecco alcuni esempi di criteri che aggiornano la variabile di flusso
target.url
non è sufficiente contenere un percorso vuoto che porta a questo errore.Esempio 1
Esempio 1: aggiornamento del criterio JavaScript di
target.url
variabilevar url = "https://mocktarget.apigee.net" context.setVariable("target.url", url);
Nell'esempio precedente, nota che la variabile di flusso
target.url
viene aggiornata con il valorehttps://mocktarget.apigee.net
contenuto in un'altra variabileurl
.Tieni presente che
target.url
include i seguenti componenti:- schema:
https://mocktarget.apigee.net
- path: vuoto
Poiché il percorso è vuoto, Apigee Edge restituisce
500 Internal Server Error
con codice di erroreprotocol.http.EmptyPath
.Esempio 2
Esempio 2: aggiornamento del criterio JavaScript di
target.url
variabilevar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Nell'esempio precedente, la variabile di flusso
target.url
viene aggiornata mediante concatenando il valorehttps://mocktarget.apigee.net
contenuto in una variabileurl
e il valore di un'altra variabilepath
, la cui valore recuperato darequest.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>
In questo esempio, il percorso dell'intestazione non viene inviato come parte della richiesta. Di conseguenza, il valore del percorso della variabile nel criterio JavaScript è
null
.Pertanto:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + null
target.url = https://mocktarget.apigee.netnull
Tieni presente che
target.url
include i seguenti componenti:- schema:
https://mocktarget.apigee.netnull
- path: vuoto
Esempio 3
Esempio 3: criterio di Assegna Messaggi che aggiorna la variabile di
target.url
tramite un'altra variabile<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>
Tieni presente che
target.url
include i seguenti componenti:- schema:
https://mocktarget.apigee.net
- path: vuoto
In tutti gli esempi precedenti, il percorso dell'URL del server di backend, ovvero
target.url
è vuoto, pertanto Apigee Edge restituisce500 Internal Server Error
con codice di erroreprotocol.http.EmptyPath
.- schema:
Risoluzione
In base alle specifiche
RFC 3986, sezione 2: componenti di sintassi, il componente path
è
obbligatorio e DEVE contenere sempre una barra (/), anche se non sono presenti
altri caratteri come parte di path
. Per eseguire questa operazione, procedi nel seguente modo:
risolvi questo problema:
- Assicurati che l'URL del server di backend, rappresentato dalla variabile di flusso
target.url
ha sempre un percorso non vuoto.- 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
, poi assicurati che il percorso di altre variabili non sia vuoto. - 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 vuoto.
- In alcuni casi, potresti non avere un nome risorsa nel percorso, quindi assicurati che il percorso
contenga almeno una barra (
- Negli esempi discussi in Diagnostica, puoi risolvere questo problema come
di seguito spiegate di seguito:
Esempio 1
Esempio 1: aggiornamento del criterio JavaScript di
target.url
variabileAggiungi una barra (
/
) alla variabileurl
per risolvere questo problema come mostrato di seguito:var url = "https://mocktarget.apigee.net/" context.setVariable("target.url", url);
Esempio 2
Esempio 2: aggiornamento del criterio JavaScript di
target.url
variabilevar 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
/iloveapis
, nell'ambito di 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: /iloveapis"
Esempio 3
Esempio 3: criterioAssignMessage che aggiorna la variabile
target.url
tramite un'altra variabileAggiungi un percorso valido nell'elemento
<Value>
del criterioAssignMessage. Per Ad esempio, puoi avere/json
come percorso API MockTarget. Vale a dire, modifica l'elemento<Value>
inhttps://mocktarget.apigee.net/json
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/json</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Specifica
Apigee Edge si aspetta che l'URL del server di backend non abbia un percorso vuoto come le seguenti 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 Devi raccogliere dati diagnostici.
È necessario 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'errore500 Internal Server Error
con il codice di erroreprotocol.http.EmptyPath
- 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