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 502 Bad Gateway
con el error
el código protocol.http.Response405WithoutAllowHeader
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 502 Bad Gateway
Además, puedes observar el siguiente mensaje de error:
{ "fault":{ "faultstring":"Received 405 Response without Allow Header", "detail":{ "errorcode":"protocol.http.Response405WithoutAllowHeader" } } }
Causas posibles
Este error se produce si el servidor de backend responde con el estado 405 Method Not Allowed
.
sin el encabezado Allow
.
Según las especificaciones
RFC 7231, sección 6.5.5: Método no permitido 405, se espera que el servidor de origen
DEBE generar y enviar un campo de encabezado Allow
en una respuesta 405
que contenga un
Una lista de los métodos admitidos actualmente del recurso de destino De lo contrario, Apigee responde con
502 Bad Gateway
y el código de error protocol.http.Response405WithoutAllowHeader
.
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
Respuesta 405 sin el encabezado Permitir desde el servidor de backend | El servidor de backend que procesa la solicitud a la API responde con el código de estado 405 sin el encabezado Allow . |
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
Para diagnosticar el error con la supervisión de API, haz lo siguiente:
- Accede a la IU de Edge como un 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.
Seleccionar una celda que tenga el código de falla
protocol.http.Response405WithoutAllowHeader
, como se muestra a continuación:Información sobre el código de falla
protocol.http.Response405WithoutAllowHeader
se muestra a continuación:Haz clic en Ver registros y expande una de las solicitudes fallidas para ver más información.
- En la ventana Registros, observa los siguientes detalles:
- Código de estado:
502
- Fuente del error:
target
- Código de error:
protocol.http.Response405WithoutAllowHeader
.
- Código de estado:
- Si la Fault Source es
target
y el Fault Code esprotocol.http.Response405WithoutAllowHeader
, eso indica que el backend servidor respondió con el código de estado405 Method Not Allowed
sin elAllow
.
Herramienta de seguimiento
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita el
de registro y
- Espera a que se produzca el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza la llamada a la API para hacerlo.
502 Bad Gateway
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 la Solicitud enviada al servidor de destino. fase, como se muestra a continuación:
Anota el valor del error del seguimiento.
En el seguimiento de ejemplo anterior, se muestra el error como
Received 405 Response without Allow Header
. Dado que Apigee emitió el error después de que se envió la solicitud al backend indica que el servidor de backend envió el código de estado de respuesta405
sin el encabezadoAllow
.- Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
En Detalles de la fase, desplázate hasta la sección Encabezados de error / respuesta. panel y determinar 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.Response405WithoutAllowHeader
ytarget
, respectivamente, que indica que este error se debe a que el backend envió el Código de estado de respuesta405
sin el encabezadoAllow
.Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
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 los errores
502
de HTTP. Verifica los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dónde: ORG, ORG y PORT# se reemplazan por valores reales.
- Realiza una búsqueda para ver si hay algún error
502
con el código de errorprotocol.http.Response405WithoutAllowHeader
durante un período específico (si el problema en el pasado) o si todavía hay solicitudes que fallan502
Si encuentras algún error
502
con el código X-Apigee-fault-code que coincida con valor deprotocol.http.Response405WithoutAllowHeader
y, luego, determina el de la fuente X-Apigee-fault-source.Ejemplo de error 502 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 de respuesta Valor X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
Causa: respuesta 405 sin encabezado Permitir desde el servidor de backend
Diagnóstico
- Determina el código de error y la fuente de errores para
502 Bad Gateway
. con la herramienta de seguimiento de APIs o los registros de acceso NGINX, como se explica en Pasos comunes del diagnóstico. - Si el Código de error es
protocol.http.Response405WithoutAllowHeader
y La fuente del error tiene el valortarget
, esto indica que el servidor backend tiene respondió con un código de estado405
sin el encabezadoAllow
. Por lo tanto, Apigee responde con502 Bad Gateway
con un código de error.protocol.http.Response405WithoutAllowHeader
Solución
Usa uno de los siguientes métodos para resolver el problema:
Servidor backend
Opción 1: Corrige el servidor de backend para que envíe un código de estado 405 con el encabezado Allow:
Asegúrate de que el servidor de backend siempre cumpla con la especificación RFC 7231, sección 6.5.5: Método no permitido 405 y envía con el estado
405
incluyendo la lista de métodos permitidos como parte de un encabezadoAllow
como se muestra a continuación:Allow: HTTP_METHODS
- Por ejemplo, si tu servidor backend permite
GET
,POST
yHEAD
, debes asegurarte de que el encabezadoAllow
contenga de la siguiente manera:Allow: GET, POST, HEAD
Solución de errores
Opción 2: Usa la administración de errores para enviar el código de estado 405 con el encabezado Allow de tu API proxy:
Si el servidor de backend muestra el código de estado 405
sin Allow
.
puedes usar el manejo de errores para responder con el código de estado 405
y el
Allow
de tu proxy de API de la siguiente manera:
Crea una política como Política AssignMessage o la política de RiseFault y establece el código de estado en
405
con el encabezadoAllow
y una mensaje.Ejemplo de política de AssignMessage para enviar un error 405 con el encabezado Permitir:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Crea un
FaultRule
enTargetEndpoint
, que invoque la política. luego de recibir el error502
con el código de errorprotocol.http.Response405WithoutAllowHeader
Ejemplo de configuración de TargetEndpoint que muestra FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>
- Guarda estos cambios en una revisión nueva del proxy de tu API y, luego, impleméntala.
- Realiza las llamadas a la API y verifica que obtienes el código de estado
405
con el EncabezadoAllow
.
Configurar propiedad
Opción 3: Configurar la propiedad en Message Processor para evitar que Apigee Edge resultado del error 502
- Si eres un usuario de la Nube privada, puedes actualizar la propiedad.
HTTP.ignore.allow_header.for.405
atrue
para evitar que Apigee Edge generar un error502
, incluso si el servidor de backend responde con405
código de estado sin el encabezadoAllow
con la guía práctica: Se configura el encabezado de permitir ignorar para la propiedad 405 en Message Processors. - Si eres un usuario de la nube pública, comunícate con el equipo de asistencia de Apigee Edge
Especificación
Apigee espera la respuesta 405 Method Not Allowed
del servidor de backend junto con
con el encabezado Allow
, según las siguientes especificaciones:
Especificación | |
---|---|
RFC 7231, sección 6.5.5: Método no permitido 405 | |
RFC 7231, sección 7.4.1: Permitir |
Puntos clave para tener en cuenta
La solución recomendada es corregir el servidor de backend para enviar el código de estado 405
.
con el encabezado Allow
y cumplir con la especificación
RFC 7231, sección 6.5.5: Método no permitido 405.
Si aún necesitas asistencia del equipo de asistencia de Apigee, ve a Se debe recopilar 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 reproducir502 Bad Gateway
con el código de errorprotocol.http.Response405WithoutAllowHeader
- 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~ORG.PORT#_access_log
Dónde: ORG, ORG y PORT# se reemplazan por valores reales.
- Registros del sistema del procesador de mensajes
/opt/apigee/var/log/edge-message-processor/logs/system.log