Puerta de enlace incorrecta 502: Respuesta 405 sin encabezado de permiso

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:

  1. Accede a la IU de Edge como un usuario con un el puesto adecuado.
  2. Cambia a la organización en la que quieres investigar el problema.

    lista desplegable de la organización
  3. Navega a Analyze > Supervisión de API > Investigar.
  4. Selecciona el período específico en el que observaste los errores.
  5. Traza Código de error en Tiempo.

  6. Seleccionar una celda que tenga el código de falla protocol.http.Response405WithoutAllowHeader, como se muestra a continuación:

  7. Información sobre el código de falla protocol.http.Response405WithoutAllowHeader se muestra a continuación:

  8. Haz clic en Ver registros y expande una de las solicitudes fallidas para ver más información.

  9. En la ventana Registros, observa los siguientes detalles:
    • Código de estado: 502
    • Fuente del error: target
    • Código de error: protocol.http.Response405WithoutAllowHeader.
  10. Si la Fault Source es target y el Fault Code es protocol.http.Response405WithoutAllowHeader, eso indica que el backend servidor respondió con el código de estado 405 Method Not Allowed sin el Allow.

Herramienta de seguimiento

Para diagnosticar el error con la herramienta Trace, sigue estos pasos:

  1. 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
  2. Asegúrate de que Show all FlowInfos esté habilitado:

  3. Selecciona una de las solicitudes fallidas y examina el seguimiento.
  4. Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
  5. 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:

  6. 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 respuesta 405 sin el encabezado Allow.

  7. Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
  8. 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:

  9. Verás los valores X-Apigee-fault-code y X-Apigee-fault-source como protocol.http.Response405WithoutAllowHeader y target, respectivamente, que indica que este error se debe a que el backend envió el Código de estado de respuesta 405 sin el encabezado Allow.
    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:

  1. 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.
  2. 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.

  3. Realiza una búsqueda para ver si hay algún error 502 con el código de error protocol.http.Response405WithoutAllowHeader durante un período específico (si el problema en el pasado) o si todavía hay solicitudes que fallan 502
  4. Si encuentras algún error 502 con el código X-Apigee-fault-code que coincida con valor de protocol.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

  1. 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.
  2. Si el Código de error es protocol.http.Response405WithoutAllowHeader y La fuente del error tiene el valor target, esto indica que el servidor backend tiene respondió con un código de estado 405 sin el encabezado Allow. Por lo tanto, Apigee responde con 502 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:

  1. 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 encabezado Allow como se muestra a continuación:

    Allow: HTTP_METHODS
    
  2. Por ejemplo, si tu servidor backend permite GET, POST y HEAD, debes asegurarte de que el encabezado Allow 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:

  1. 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 encabezado Allow 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>
    
  2. Crea un FaultRule en TargetEndpoint, que invoque la política. luego de recibir el error 502 con el código de error protocol.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>
    
  3. Guarda estos cambios en una revisión nueva del proxy de tu API y, luego, impleméntala.
  4. Realiza las llamadas a la API y verifica que obtienes el código de estado 405 con el Encabezado Allow.

Configurar propiedad

Opción 3: Configurar la propiedad en Message Processor para evitar que Apigee Edge resultado del error 502

  1. Si eres un usuario de la Nube privada, puedes actualizar la propiedad. HTTP.ignore.allow_header.for.405 a true para evitar que Apigee Edge generar un error 502, incluso si el servidor de backend responde con 405 código de estado sin el encabezado Allow con la guía práctica: Se configura el encabezado de permitir ignorar para la propiedad 405 en Message Processors.
  2. 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 reproducir 502 Bad Gateway con el código de error protocol.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
    

Referencias

Manejo de errores en Apigee