Estás viendo la documentación de Apigee Edge.
Ve a la
Documentación de Apigee X. información
Síntoma
La aplicación cliente obtiene un código de estado HTTP de 500 Internal Server Error
con
el código de error protocol.http.BadPath
como respuesta a las llamadas a la API.
Mensaje de error
La aplicación cliente obtiene el siguiente código de respuesta:
HTTP/1.1 500 Internal Server Error
Además, puedes observar el siguiente mensaje de error:
{ "fault":{ "faultstring":"Invalid request path", "detail":{ "errorcode":"protocol.http.BadPath" } } }
Causas posibles
Este error ocurre si la URL de solicitud del servidor de backend, representada por la variable de flujo
target.url
,
contiene una path
que comienza con un signo de interrogación (?
) en su lugar
de una barra diagonal (/
), que es no válida.
Según las especificaciones Sección 3 del RFC 3986: Componentes de la sintaxis y RFC 3986, sección 3.3: Ruta de acceso:
La sintaxis del URI tiene los siguientes componentes:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
- El componente
path
es obligatorio y DEBE comenzar con y siempre tendrán una barra diagonal (/
).
Por lo tanto, si la URL de solicitud del servidor de backend tiene un componente path
que se inicia
con un signo de interrogación (?
) en lugar de una barra diagonal (/
) y, luego, Apigee
Edge responde con 500 Internal Server Error
y código de error.
protocol.http.BadPath
Por ejemplo, si target.url
tiene el valor
https://www.mocktarget.apigee.net?json
, este error se produce como
Se determinó que path
es no válido,ya que comienza con un signo de interrogación
(?
) en lugar de una barra diagonal (/
).
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
La URL del servidor de backend (target.url) tiene una ruta no válida | El componente de ruta de acceso en la URL del servidor de backend representado por la variable de flujo
target.url comienza con un signo de interrogación (? ) en lugar de una palabra hacia delante.
o barra diagonal (/ ). |
Usuarios perimetrales de nubes públicas y privadas |
Pasos comunes de diagnóstico
Usa una de las siguientes herramientas o técnicas para diagnosticar este error:
Supervisión de API
Procedimiento 1: Usa la supervisión de API
Para diagnosticar el error con la supervisión de API, haz lo siguiente:
- Accede a la IU de Apigee Edge como usuario con un el puesto adecuado.
Cambia a la organización en la que quieres investigar el problema.
- Navega a Analyze > Supervisión de API > Investigar.
- Selecciona el período específico en el que observaste los errores.
Traza Código de error en Tiempo.
Selecciona una celda que tenga el código de falla
protocol.http.BadPath
como se muestra a continuación:La información sobre el código de falla
protocol.http.BadPath
se muestra como como se muestra a continuación:Haz clic en Ver registros y expande la fila de la solicitud con errores.
- En la ventana Registros, observa los siguientes detalles:
- Código de estado:
500
- Fuente del error:
target
- Código de error:
protocol.http.BadPath
- Código de estado:
- Si la Fault Source es
target
y el Fault Code esprotocol.http.BadPath
, eso indica que la URL del servidor backend tiene un ruta de acceso no válida.
Trace
Procedimiento 2: Usa la herramienta Trace
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita la sesión de seguimiento y haz lo siguiente:
- Espera a que se produzca el error
500 Internal Server Error
. - Si puedes reproducir el problema, realiza la llamada a la API para hacerlo.
500 Internal Server Error
- Espera a que se produzca el error
Asegúrate de que Show all FlowInfos esté habilitado:
- Selecciona una de las solicitudes fallidas y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
Por lo general, encontrarás el error en un flujo después de Target Request Flow Started (Flujo de solicitud objetivo iniciado). fase, como se muestra a continuación:
Toma nota del valor del error del seguimiento:
error: Ruta de solicitud no válida
Dado que Apigee Edge presenta el error después de Target Request Flow Started, indica que la URL del servidor de backend tiene una ruta de acceso no válida. De esta forma, más probable es que suceda si la variable de flujo
target.url
(que representa la URL de backend) en Apigee Edge se haya actualizado con una ruta de acceso no válida una de las políticas en el flujo de solicitud de destino.- Examina la sección Variables leídas y asignadas en cada uno de los flujos hacia atrás. del flujo de errores hacia la fase de Flujo de solicitud de destino iniciado.
- Determina la política, dónde estaba la variable de flujo
target.url
actualizado:Seguimiento de muestra que muestra que la política de JavaScript actualizó la variable de flujo
target.url:
En el seguimiento de ejemplo que se muestra arriba, anota el valor de la variable de flujo
target.url
se actualiza en una política de JavaScript llamadaJS- SetTargetURL
de la siguiente manera:target.url : https://mocktarget.apigee.net?json
- Ten en cuenta que el valor en
target.url
tiene los siguientes componentes:- esquema:
https
- autoridad:
mocktarget.apigee.net
- ruta de acceso:
?json
- esquema:
- Dado que el componente path comienza con un signo de interrogación (
?
) en lugar de una barra diagonal (/
), recibirás el errorInvalid request path
- Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
Desplázate hacia abajo hasta la sección Detalles de la fase - Encabezados de error y determina el valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:
Verás los valores X-Apigee-fault-code y X-Apigee-fault-source como
protocol.http.BadPath
ytarget
, respectivamente, Este indica que este error se debe a que la URL del servidor de backend tiene una ruta no válida.Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
NGINX
Procedimiento 3: Usa registros de acceso de NGINX
Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:
- Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para determinar
la información clave sobre
500 Internal Server Error
HTTP. Verifica los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Realiza una búsqueda para ver si hay algún error
500
con el código de errorprotocol.http.BadPath
durante un período específico (si el problema ocurrió en el anteriores) o si todavía hay solicitudes que fallan con500
. Si encuentras algún error
500
con la coincidencia X-Apigee-fault-code el valor deprotocol.http.BadPath
y, luego, determina el valor del argumento X- Fuente de errores de Apigee.Ejemplo de error 500 del registro de acceso de NGINX:
La entrada de ejemplo anterior del registro de acceso de NGINX tiene los siguientes valores para X-Apigee- error-code y X-Apigee-fault-source:
Encabezados Valor X-Apigee-fault-code protocol.http.BadPath
X-Apigee-fault-source target
Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source son
protocol.http.BadPath
ytarget
, respectivamente, que indican que este error se produce porque la URL del servidor de backend tiene una ruta de acceso no válida.
Causa: La URL del servidor de backend (target.url) tiene una ruta de acceso no válida
Diagnóstico
- Determina el código de errores y la fuente de errores de
500 Internal Server Error
con la supervisión de API, la herramienta de seguimiento o los registros de acceso de NGINX como se explica en Pasos comunes del diagnóstico. - Si el Código de error es
protocol.http.BadPath
y la Fuente del error tiene el valortarget
, esto indica que la URL del servidor backend tiene una URL no válida de la ruta de acceso. La variable de flujo
target.url
representa la URL del servidor de backend en Apigee. Edge. Este error suele ocurrir si intentas actualizar la URL del servidor de backend (target.url
) de forma dinámica usando cualquiera de las políticas (dentro de proxy/flujo compartido) en el flujo de la solicitud de destino, de modo que tenga una ruta de acceso no válida.Determina si la variable de flujo
target.url
tiene un valor no válido path y la fuente de su valor mediante uno de los siguientes métodos:Trace
Usa la herramienta Trace
Si has capturado un registro para este error, sigue los pasos que se explican en Usar la herramienta Trace y
- Verifica si
target.url
tiene una ruta de acceso no válida, es decir, si comienza con un signo de interrogación (?
) en lugar de una barra diagonal (/
). Si es así, averigüe cuál es la política que modificó o actualizó el valor de
target.url
para que contenga una ruta de acceso no válida.Seguimiento de muestra que muestra que la política de JavaScript actualizó la variable de flujo
target.url
- En el seguimiento de muestra anterior, observa que la política de JavaScript modificó o actualizó el valor de
target.url
para que contenga una ruta de acceso no válida. - Ten en cuenta que
target.url
tiene los siguientes componentes:- esquema:
https
- autoridad:
mocktarget.apigee.net
- ruta de acceso:
?json
La ruta comienza con un signo de interrogación (
?
) en lugar de un avance. (/
), por lo tanto, no es válida. - esquema:
Registros
Usa registros en tu servidor de registros
- Si no puedes rastrear este error (un problema intermitente), comprueba si
registraste la información sobre el valor de la variable de flujo
target.url
, con políticas como MessageLogging o ServiceReferencia a tu servidor de registros. - Si tienes los registros, revísalos
- Verifica si
target.url
tiene una ruta de acceso no válida. - Ve si puedes determinar la información sobre qué política se modificó
target.url
para que contenga una ruta no válida
- Verifica si
proxy de API
Revisa el proxy de API con errores
Si no tienes registros de este error, revisa la API con errores proxy para determinar qué modificó o actualizó la variable de flujo
target.url
para que contenga una ruta de acceso no válida. Verifica lo siguiente:- La política en el proxy de API
- Cualquier flujo compartido que se invoca desde el proxy
- Verifica si
Examina detenidamente la política específica (por ejemplo,AssignMessage o JavaScript) que modifica o actualiza la variable de flujo
target.url
y determina la causa del actualizandotarget.url
para que tenga una ruta de acceso no válida.Estas son algunas políticas de ejemplo que actualizan la variable de flujo
target.url
contiene incorrectamente una ruta de acceso no válida que conduce a este error.Ejemplo 1
Ejemplo 1: Actualización de la variable
target.url
de la política de JavaScriptvar url = "https://mocktarget.apigee.net?json" context.setVariable("target.url", url);
En el ejemplo anterior, ten en cuenta que la variable de flujo
target.url
se actualiza. con el valorhttps://mocktarget.apigee.net?json
contenido en otra variableurl.
Ten en cuenta que el valor de
url
tiene los siguientes componentes:- esquema:
https
- autoridad:
mocktarget.apigee.net
- ruta de acceso:
?json
La ruta comienza con un signo de interrogación (
?
) en lugar de una barra diagonal. (/
), que es no válido. Por lo tanto, Apigee Edge vuelve500 Internal Server Error
con el código de errorprotocol.http.BadPath
.Ejemplo 2
Ejemplo 2: Actualización de la variable
target.url
de la política de JavaScript según el valor del encabezado de la solicitudvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
En el ejemplo anterior, observa que la variable de flujo
target.url
se actualiza. mediante la concatenación del valorhttps://mocktarget.apigee.net
contenido en un variableurl
y el valor de otra variablepath
, cuyo valor se recupera derequest.header.Path.
Si tienes acceso a la solicitud o el seguimiento reales, puedes verificar el valor real. pasado a
request.header.Path
.Solicitud de ejemplo que realiza el usuario
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: ?user"
En este ejemplo, la ruta del encabezado no se envía como parte de la solicitud. Por lo tanto, el valor de la variable
path
en la política de JavaScript esnull
.Entonces:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + "?user"
target.url = https://mocktarget.apigee.net?user
Ten en cuenta que el valor de
target.url
tiene los siguientes componentes:- esquema:
https
- autoridad:
mocktarget.apigee.net
- ruta de acceso:
?user
La ruta comienza con un signo de interrogación (
?
) en lugar de una barra diagonal. (/
), que es no válido. Por lo tanto, Apigee Edge muestra500 Internal Server Error
con el código de errorprotocol.http.BadPath
.Ejemplo 3
Ejemplo 3: Actualización de la política
target.url
de la política deAssignMessage<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>
Ten en cuenta que el valor de
url
tiene los siguientes componentes:- esquema:
https
- autoridad:
mocktarget.apigee.net
- ruta de acceso:
?echo
En este ejemplo, la ruta comienza con un signo de interrogación (
?
). en lugar de una barra diagonal (/
), que es no válida. Por lo tanto, Apigee Edge muestra500 Internal Server Error
con un código de errorprotocol.http.BadPath
- esquema:
Solución
Según la especificación de URL
RFC 3986, sección 3: Componentes de sintaxis, es obligatorio el componente path
y DEBE comenzar siempre con "/". Por lo tanto, sigue estos pasos para solucionar este problema:
- Asegúrate de que la URL del servidor de backend, representada por la variable de flujo
target.url
siempre tiene una ruta de acceso válida y siempre comienza con un barra diagonal (/
).- .
- En algunos casos, es posible que no tengas un nombre de recurso en la ruta, entonces asegúrate de que el
la ruta tiene, al menos, una barra diagonal (
/
). - Si usas otras variables para determinar el valor de la variable de flujo
target.url
y asegúrate de que las otras variables no tengan un ruta de acceso no válida. - Si realizas alguna operación de cadena para determinar el valor de la variable de flujo.
target.url
y, luego, asegúrate de que el resultado de la cadena Las operaciones no tienen una ruta de acceso no válida.
- En algunos casos, es posible que no tengas un nombre de recurso en la ruta, entonces asegúrate de que el
la ruta tiene, al menos, una barra diagonal (
En las muestras que mencionamos anteriormente, puedes solucionar este problema de la siguiente manera:
Ejemplo 1
Ejemplo 1: Actualización de la variable
target.url
de la política de JavaScriptUsa una barra diagonal (
/
) en lugar de un signo de interrogación (?
) en la la variableurl
para solucionar este problema como se muestra a continuación:var url = "https://mocktarget.apigee.net/json" context.setVariable("target.url", url);
Ejemplo 2
Ejemplo 2: Actualización de la variable
target.url
de la política de JavaScript según el valor del encabezado de la solicitudvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
Asegúrate de pasar una ruta de acceso válida, por ejemplo:
/user
, como parte de la solicitud. encabezadoPath
para solucionar este problema como se muestra a continuación:Solicitud de muestra:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /user"
Ejemplo 3
Ejemplo 3: Actualización de la variable
target.url
de la política deAssignMessageAgrega una ruta de acceso válida en el elemento
<Value>
de la políticaAssignMessage. Es decir, reemplaza el signo de interrogación (?
) por a barra diagonal (/
) en el elemento<Value>
y Establécelo enhttps://mocktarget.apigee.net/echo
para corregir el problema como se muestra a continuación:<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>
Especificación
Apigee Edge espera que el
path
componente en la URL del servidor de backend DEBE comenzar siempre con una barra diagonal (/
) de acuerdo con lo siguiente específicas:Especificación RFC 3986, sección 3: Componentes de sintaxis RFC 3986, sección 3.3: Ruta de acceso Si aún necesitas asistencia del equipo de asistencia de Apigee, ve a Debes recopilar y la información de diagnóstico.
Se debe recopilar información de diagnóstico
Si el problema persiste, incluso después de seguir las instrucciones anteriores, reúne la siguiente información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:
Si eres usuario de la nube pública, proporciona la siguiente información:
- Nombre de la organización
- Nombre del entorno
- Nombre del proxy de API
- Completa el comando
curl
que se usa para reproducir500 Internal Server Error
con el código de errorprotocol.http.BadPath
- Archivo de seguimiento de las solicitudes a la API
Si eres un usuario de la Nube privada, proporciona la siguiente información:
- Mensaje de error completo observado para las solicitudes fallidas
- Nombre del entorno
- Paquete de proxy de API
- Archivo de seguimiento de las solicitudes a la API
Registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dónde: ORG, ENV y PORT# se reemplazan por valores reales.
- Registros del sistema del procesador de mensajes
/opt/apigee/var/log/edge-message- processor/logs/system.log
Referencias