Estás consultando la documentación de Apigee Edge.
Consulta 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 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 veas 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 un código de estado 405 Method Not Allowed
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 DEBE generar y enviar un campo de encabezado Allow
en una respuesta 405
que contenga 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 encabezado Permitir 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 la API, sigue estos pasos:
- Accede a la IU de Edge como un usuario con el rol adecuado.
Cambia a la organización en la que quieres investigar el problema.
- Navega a la página Analyze > API Monitoring > Investigate.
- Selecciona el período específico en el que observaste los errores.
Traza el código de falla en función del valor Time.
Selecciona una celda que tenga el código de falla
protocol.http.Response405WithoutAllowHeader
, como se muestra a continuación:A continuación, se muestra información sobre el código de falla
protocol.http.Response405WithoutAllowHeader
:Haz clic en Ver registros y expande una de las solicitudes fallidas para ver más información.
- En la ventana Registros, ten en cuenta los siguientes detalles:
- Código de estado:
502
- Fuente de la falla:
target
- Código de fallas:
protocol.http.Response405WithoutAllowHeader
.
- Código de estado:
- Si la Fuente de errores es
target
y el Código de fallas esprotocol.http.Response405WithoutAllowHeader
, eso indica que el servidor de backend respondió con el código de estado405 Method Not Allowed
sin el encabezadoAllow
.
Herramienta de seguimiento
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita la
sesión de registro y realiza una de estas acciones:
- Espera a que ocurra el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza una llamada a la API para reproducirlo:
502 Bad Gateway
error.
- Espera a que ocurra el error
Asegúrate de que la opción Show all FlowInfos esté habilitada:
- Selecciona una de las solicitudes con errores 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 fase Solicitud enviada al servidor de destino, como se muestra a continuación:
Observa el 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 envió la solicitud al servidor de backend, este indica que este envió el código de estado de respuesta405
sin 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 / 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.Response405WithoutAllowHeader
ytarget
respectivamente, lo 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, sigue estos pasos:
- 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
. Verifica los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dónde: Se reemplazan ORG, ORG y PORT# por valores reales.
- Busca para ver si hay errores
502
con el código de errorprotocol.http.Response405WithoutAllowHeader
durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con502
. Si encuentras algún error
502
con el código X-Apigee-fault-code que coincide con el valor deprotocol.http.Response405WithoutAllowHeader
, determina el valor de X-Apigee-fault-codeEjemplo 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-fall-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 el encabezado "Allow" del servidor de backend
Diagnóstico
- Determina el código de error y la fuente de errores para
502 Bad Gateway
mediante la supervisión de la API, la herramienta de seguimiento 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.Response405WithoutAllowHeader
y la fuente de errores tiene el valortarget
, esto indica que el servidor de backend respondió con un código de estado405
sin el encabezadoAllow
. Por lo tanto, Apigee responde con502 Bad Gateway
con el código de errorprotocol.http.Response405WithoutAllowHeader
.
Resolució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 el código de estado 405 con el encabezado Permitir:
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 lo envíe con el código de estado
405
. Para ello, incluye 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
,POST
yHEAD
, debes asegurarte de que el encabezadoAllow
los 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 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 errores 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 deAssignMessage o la política de ElevateFault, y establece el código de estado en
405
con el encabezadoAllow
y un mensaje personalizado.Ejemplo de la política deAssignMessage para enviar el 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 cuando se obtenga 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 de tu proxy de API y, luego, impleméntala.
- Realiza las llamadas a la API y verifica que obtengas el código de estado
405
con el encabezadoAllow
.
Configurar propiedad
Opción 3: Configura la propiedad en 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.405
atrue
para evitar que Apigee Edge genere un error502
, incluso si el servidor de backend responde con el código de estado405
sin el encabezadoAllow
mediante la guía práctica: Configura el encabezado de omisión para la propiedad 405 en Message Processor. - Si eres 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: Método 405 no permitido | |
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: 405 Método no permitido.
Si aún necesitas asistencia de la 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, 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
- Completa el comando
curl
que se usa para reproducir el502 Bad Gateway
con el código de errorprotocol.http.Response405WithoutAllowHeader
. - Archivo de seguimiento para 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 para las solicitudes a la API
Registros de acceso de NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dónde: Se reemplazan ORG, ORG y PORT# por valores reales.
- Registros del sistema del procesador de mensajes
/opt/apigee/var/log/edge-message-processor/logs/system.log