Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
Síntoma
La aplicación cliente obtiene un código de estado HTTP 502 Bad Gateway con el código de error 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, es posible que observes 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 405 Method Not Allowed código de estado
sin el encabezado Allow.
Según la especificación
RFC 7231, sección 6.5.5: 405 Método no permitido, se espera que el servidor de origen
DEBA generar y enviar un campo de encabezado Allow en una respuesta 405 que contenga una
lista de los métodos compatibles 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 encabezado Allow del 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 de la nube pública y privada de Edge |
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 una función adecuada.
Cambia a la organización en la que deseas investigar el problema.
- Navega a la página Analizar > Supervisión de API > Investigar.
- Selecciona el período específico en el que observaste los errores.
Traza el Código de falla en función del Tiempo.
Selecciona una celda que tenga el código de falla
protocol.http.Response405WithoutAllowHeadercomo se muestra a continuación:
La información sobre el código de falla
protocol.http.Response405WithoutAllowHeaderse muestra como se indica a continuación:
Haz clic en Ver registros y expande una de las solicitudes con errores para ver más información.
- En la ventana Registros, toma nota de los siguientes detalles:
- Código de estado:
502 - Fuente de falla:
target - Código de falla:
protocol.http.Response405WithoutAllowHeader.
- Código de estado:
- Si la Fuente de falla es
targety el Código de falla esprotocol.http.Response405WithoutAllowHeader, eso indica que el servidor de backend respondió con el código de estado405 Method Not Allowedsin el encabezadoAllow.
Herramienta de Trace
Para diagnosticar el error con la herramienta de Trace, haz lo siguiente:
- Habilita la
sesión de seguimiento y haz lo siguiente:
- Espera a que se produzca el error
502 Bad Gateway. - Si puedes reproducir el problema, realiza la llamada a la API para reproducir el problema -
502 Bad Gatewayerror
- Espera a que se produzca el error
Asegúrate de que Mostrar todos los FlowInfos esté habilitado:
- Selecciona una de las solicitudes con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y ubica dónde se produjo la falla.
Por lo general, encontrarás el error en un flujo después de la fase Solicitud enviada al servidor de destino , como se muestra a continuación:
Toma nota del valor del error del seguimiento.
El seguimiento de muestra anterior muestra el error como
Received 405 Response without Allow Header. Dado que Apigee genera el error después de que se envía la solicitud al servidor de backend, indica que el servidor de backend envió el código de estado de respuesta405sin el encabezadoAllow.- Navega a la fase AX (datos de Analytics registrados) en el seguimiento y haz clic en ella.
Desplázate hacia abajo hasta la sección Encabezados de error o respuesta en el panel Detalles de la fase y determina los valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:
- Verás los valores de X-Apigee-fault-code y X-Apigee-fault-source como
protocol.http.Response405WithoutAllowHeaderytarget, respectivamente, lo que indica que este error se produce porque el backend envió el código de estado de respuesta405sin el encabezadoAllow.Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-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 HTTP
502. Consulta los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Donde: ORG, ORG y PORT# se reemplazan por valores reales.
- Busca para ver si hay errores
502con el código de errorprotocol.http.Response405WithoutAllowHeaderdurante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con502. Si encuentras errores
502con el X-Apigee-fault-code que coincida con el valor deprotocol.http.Response405WithoutAllowHeader, determina el valor de X-Apigee-fault-source.Ejemplo de error 502 del registro de acceso de NGINX:
La entrada de muestra anterior del registro de acceso de NGINX tiene los siguientes valores para X-Apigee- fault-code y X-Apigee-fault-source:
Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Causa: Respuesta 405 sin encabezado Allow del servidor de backend
Diagnóstico
- Determina el Código de falla y la Fuente de falla para
502 Bad Gatewaycon la Supervisión de API, la herramienta de Trace o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico. - Si el Código de falla es
protocol.http.Response405WithoutAllowHeadery la Fuente de falla tiene el valortarget, esto indica que el servidor de backend respondió con un código de estado405sin el encabezadoAllow. Por lo tanto, Apigee responde con502 Bad Gatewaycon el código de errorprotocol.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 enviar el 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: 405 Método no permitido y envíe con el código de estado
405incluyendo 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 de backend permite los métodos
GET,POSTyHEAD, debes asegurarte de que el encabezadoAllowlos contenga de la siguiente manera:Allow: GET, POST, HEAD
Manejo de fallas
Opción 2: Usa la solución de errores para enviar el código de estado 405 con el encabezado Allow desde tu proxy de API:
Si el servidor de backend muestra el código de estado 405 sin el encabezado Allow, puedes usar el manejo de fallas para responder con el código de estado 405 y el encabezado Allow desde tu proxy de API de la siguiente manera:
Crea una política, como la política AssignMessage o RaiseFault y establece el código de estado en
405con el encabezadoAllowy un mensaje personalizado.Ejemplo de política de AssignMessage para enviar 405 con encabezado Allow:
<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
FaultRuleen elTargetEndpointque invoque la política cuando obtenga el error502con 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 de tu proxy de API y, luego, implementa la revisión.
- Realiza las llamadas a la API y verifica que obtengas el código de estado
405con elAllowencabezado.
Configura la propiedad
Opción 3: Configura la propiedad en el Message Processor para evitar que Apigee Edge muestre el error 502
- Si eres un usuario de la nube privada, puedes actualizar la propiedad
HTTP.ignore.allow_header.for.405atruepara evitar que Apigee Edge genere un error502, incluso si el servidor de backend responde con el código de estado405sin el encabezadoAllowcon la guía práctica: Configura el encabezado Allow de omisión 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 el encabezado Allow según las siguientes especificaciones:
| Especificación | |
|---|---|
| RFC 7231, sección 6.5.5: 405 Método no permitido | |
| RFC 7231, sección 7.4.1: Permitir |
Aspectos clave que debes 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: 405 Método no permitido.
Si aún necesitas asistencia del equipo de asistencia de Apigee, consulta 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, recopila la siguiente información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge.
Si eres un usuario de la nube pública, proporciona la siguiente información:
- Nombre de la organización
- Nombre del entorno
- Nombre del proxy de API
- Comando
curlcompleto que se usó para reproducir el502 Bad Gatewaycon 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 con errores
- 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
Donde: ORG, ORG y PORT# se reemplazan por valores reales.
- Registros del sistema del Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log