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

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:

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

    lista desplegable de la organización
  3. Navega a la página Analyze > API Monitoring > Investigate.
  4. Selecciona el período específico en el que observaste los errores.
  5. Traza el código de falla en función del valor Time.

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

  7. A continuación, se muestra información sobre el código de falla protocol.http.Response405WithoutAllowHeader:

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

  9. 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.
  10. Si la Fuente de errores es target y el Código de fallas es protocol.http.Response405WithoutAllowHeader, eso indica que el servidor de backend respondió con el código de estado 405 Method Not Allowed sin el encabezado Allow.

Herramienta de seguimiento

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

  1. 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.
  2. Asegúrate de que la opción Show all FlowInfos esté habilitada:

  3. Selecciona una de las solicitudes con errores 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 fase Solicitud enviada al servidor de destino, como se muestra a continuación:

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

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

  9. Verás los valores de X-Apigee-fault-code y X-Apigee-fault-source como protocol.http.Response405WithoutAllowHeader y targetrespectivamente, lo 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, sigue estos pasos:

  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 HTTP 502.
  2. 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.

  3. Busca para ver si hay errores 502 con el código de error protocol.http.Response405WithoutAllowHeader durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con 502.
  4. Si encuentras algún error 502 con el código X-Apigee-fault-code que coincide con el valor de protocol.http.Response405WithoutAllowHeader, determina el valor de X-Apigee-fault-code

    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-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

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

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

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

  1. 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 encabezado Allow 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>
    
  2. Crea un FaultRule en TargetEndpoint, que invoque la política cuando se obtenga 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 de tu proxy de API y, luego, impleméntala.
  4. Realiza las llamadas a la API y verifica que obtengas el código de estado 405 con el encabezado Allow.

Configurar propiedad

Opción 3: Configura la propiedad en Message Processor para evitar que Apigee Edge muestre el 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 genere un error 502, incluso si el servidor de backend responde con el código de estado 405 sin el encabezado Allow mediante la guía práctica: Configura el encabezado de omisión para la propiedad 405 en Message Processor.
  2. 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 el 502 Bad Gateway con el código de error protocol.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
    

Referencias

Manejo de errores en Apigee