502 Bad Gateway - ResponseWithBody

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.ResponseWithBody 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 uno de los siguientes mensajes de error:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

Causas posibles

Este error ocurre si la respuesta HTTP del servidor de backend a Apigee Edge es 204 No Content o 205 Reset Content, pero contiene la respuesta body o uno o más de los siguientes encabezados:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

Según las especificaciones RFC 7231, sección 6.3.5: 204 Sin contenido y RFC 7231, sección 6.3.6: 205 Restablecer contenido, se espera que no haya Debe enviarse como parte del cuerpo de la carga útil de la respuesta con el código de estado 204 No Content o 205 Reset Content mediante el servidor de origen. Los encabezados de respuesta como Content-Length, Content-Encoding o Transfer-Encoding indica el tamaño, el tipo o el formato de la carga útil de la respuesta.

Por lo tanto, Apigee Edge muestra un código de estado 502 Bad Gateway con el código de error protocol.http.ResponseWithBody al cliente con el siguiente comando circunstancias:

Código de estado del servidor de backend
La respuesta del servidor de backend contiene 204 No Content 205 Restablecer contenido
Cuerpo de la respuesta ERROR ERROR

Encabezado Content-Length

(configurado en un valor distinto de cero)

ERROR ERROR

Content-Encoding

(configurada en codificación compatible con Apigee Edge)

ERROR SIN ERRORES
Transfer-Encoding ERROR ERROR

Estas son las posibles causas de este error:

Causa Descripción Instrucciones de solución de problemas aplicables para
Cuerpo de la respuesta o encabezados con respuesta 204 del servidor de backend El servidor de backend envía un 204 No Content o 205 Reset Content. con un cuerpo de respuesta o uno o más encabezados Content-Type Content-Encoding o Transfer-Encoding. 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 Apigee Edge como usuario con un el puesto adecuado.
  2. Cambia a la organización en la que quieres investigar el problema.

  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. Selecciona una celda que tenga el código de error protocol.http.ResponseWithBody como como se muestra a continuación:

    ( ver imagen más grande)

  7. Verás la información sobre el código de falla. protocol.http.ResponseWithBody, como se muestra a continuación:

    ( ver imagen más grande)

  8. Haz clic en Ver registros y expande la fila de la solicitud con errores.

    ( ver imagen más grande)

  9. En la ventana Registros, observa los siguientes detalles:
    • Código de estado: 502
    • Fuente del error: target
    • Código de error: protocol.http.ResponseWithBody.
  10. Si la Fault Source tiene el valor target y la Fault Code tiene el valor protocol.http.ResponseWithBody, luego indica que el error ocurrió porque el servidor backend envió un Código de estado 204 No Content o 205 Reset Content con el cuerpo de la respuesta o uno de los encabezados mencionados en el Causas posibles.

Herramienta de seguimiento

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

  1. Habilita la sesión de seguimiento. y:
    1. Espera a que se produzca el error 502 Bad Gateway. o
    2. Si puedes reproducir el problema, realiza la llamada a la API y reproduce el error 502 Bad Gateway.
  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 se produjo la falla para determinar si se produjo un error.
  5. Por lo general, encontrarás el error en flowinfo Error después de la fase Solicitud enviada al servidor de destino, como se muestra a continuación:

    Situación 1

    Situación 1: El servidor de backend responde con el código de estado 204 No Content. que contiene el cuerpo de la respuesta o uno de los encabezados enumerados en Causas posibles.

    Toma nota de los valores de lo siguiente del seguimiento:

    • error: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    Situación 2

    Situación 2: El servidor de backend responde con un código de estado 204 No Content que contiene el cuerpo de la respuesta o uno de los encabezados enumerados en Posibles causas.

    Toma nota de los valores de lo siguiente del seguimiento:

    • error: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. Navega a la fase AX (datos de Analytics registrados) en el seguimiento y hago clic en ella.
  7. Desplázate hacia abajo hasta la sección Detalles de la fase, Encabezados del error y determinar los valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:

    ( ver imagen más grande)

  8. Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source are protocol.http.ResponseWithBody y target respectivamente. Esto indica que el error ocurrió porque el servidor backend envió un el código de estado 204 No Content o 205 Reset Content con el el cuerpo de la respuesta o uno de los encabezados mencionados en la sección Posibles causas.
    Error Valor
    X-Apigee-fault-code protocol.http.ResponseWithBody
    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 determina la información clave sobre 502 Bad Gateway HTTP.
  2. Verifica los registros de acceso de NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dónde: ORG, ENV 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.ResponseWithBody durante un período específico (si el problema ocurrió 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 coincida con el valor de protocol.http.ResponseWithBody y, luego, 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.ResponseWithBody
    X-Apigee-fault-source target
  5. Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source son protocol.http.ResponseWithBody y target respectivamente. Esto indica que el error ocurrió porque el servidor backend envió un el código de estado 204 No Content o 205 Reset Content con el el cuerpo de la respuesta o uno de los encabezados mencionados en la sección Posibles causas.

Causa: Cuerpo de la respuesta o encabezados con respuesta 204 del servidor de backend

Diagnóstico

  1. Determina el código de error y la fuente de errores del error observado con la API. los registros de acceso de Monitoring, Trace o NGINX, como se explica en Pasos comunes del diagnóstico.
  2. Si el Código de error es protocol.http.ResponseWithBody y La fuente del error tiene el valor target; esto indica que el backend el servidor respondió con un estado 204 No Content o 205 Reset Content con el cuerpo de la respuesta o uno de los encabezados mencionados en Causas posibles.
  3. Para validar si el servidor de backend realmente envió un cuerpo de carga útil de respuesta o uno o más de los encabezados mencionados en Posibles causas, puedes realiza los siguientes pasos:

    1. Si eres un usuario de la nube pública y puedes realizar la misma solicitud a la API al un servidor de backend directamente desde cualquiera de tus sistemas.

    2. Si eres un usuario de la nube privada, puedes realizar la misma solicitud a la API al un servidor de backend directamente desde uno de los procesadores de mensajes asociados de la organización y el entorno en los que se observa la falla.
    3. Revisa la respuesta recibida del servidor backend y verifica que contenga un el cuerpo de la carga útil de respuesta y/o uno o más de los encabezados antes mencionados. Si es así, entonces la causa de este error.

      Ejemplo 1

      Ejemplo 1: Respuesta del servidor de backend 204 con encabezado de codificación de contenido

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      En este ejemplo, el servidor de backend respondió con 204 No Content código de estado y Content-Encoding: gzip

      Ejemplo 2

      Ejemplo n.° 2: Respuesta del servidor de backend 204 con encabezado Content-Length

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      En este ejemplo, el servidor de backend respondió con 204 No Content código de estado y Content-Length: 48

      Ejemplo 3

      Ejemplo n.o 3: Respuesta del servidor de backend 205 con cuerpo de respuesta

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      En este ejemplo, el servidor de backend respondió con Código de estado 205 Reset Content con cuerpo de respuesta This is a sample Response.

    4. En todos los ejemplos anteriores, el servidor de backend envió 204 No Content o Código de estado 205 Reset Content con el cuerpo de la respuesta o uno de los encabezados que se mencionan en Posibles causas.
    5. Por lo tanto, Apigee Edge envió un código de estado 502 Bad Gateway con código de error. protocol.http.ResponseWithBody

Solución

Asegúrate de que el servidor de backend siempre cumpla con la especificación RFC 7231, sección 6.3.6: 205 Restablecer contenido, cuando se envía el 204 No Content o 205 Reset Content a Apigee Edge. Es decir, el servidor de backend NO SE DEBE enviar lo siguiente como parte de un 204 No Content o Respuesta de 205 Reset Content:

  1. Cuerpo de la carga útil de la respuesta
  2. Y cualquiera de los siguientes encabezados:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

Especificación

Apigee Edge responde con el código de estado 502 Bad Gateway y el código de error protocol.http.ResponseWithBody si el servidor de backend envía un Respuesta 204 No Content o 205 Reset Content, pero no cumple con las siguientes especificaciones de RFC:

Especificación
RFC 7231, sección 6.3.5: 204 Sin contenido
RFC 7231, sección 6.3.6: 205 Restablecer contenido

Puntos clave para tener en cuenta

La solución recomendada es corregir el servidor de backend para enviar 204 No Content. y 205 Reset Content sin cuerpo de respuesta y ninguna de las encabezados: Content-Length, Content-Encoding y Transfer-Encoding y cumpla con las especificaciones RFC 7231, sección 6.3.5: 204 Sin contenido y RFC 7231, sección 6.3.6: 205 Restablecer contenido.

Si aún necesitas ayuda del equipo de asistencia de Apigee, ve a Se debe recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Obtén 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 el error 502
  • 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~ENV.PORT#_access_log

    Dónde: ORG, ENV y PORT# se reemplazan por valores reales.

  • Registros del sistema del procesador de mensajes /opt/apigee/var/log/edge-message-processor/logs/system.log