502 Bad Gateway: TooBigHeaders

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 código de error protocol.http.TooBigHeaders como respuesta para 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":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Causas posibles

Este error se produce si el tamaño total de los encabezados que envía el servidor de destino o de backend a Apigee Edge como parte de la respuesta HTTP es mayor que el límite permitido en Apigee Edge.

Estas son las posibles causas de este error:

Causa Descripción Instrucciones de solución de problemas aplicables para
El tamaño de los encabezados en la respuesta es mayor que el límite permitido El tamaño del encabezado de un encabezado en particular o la suma de los tamaños de encabezado de todos los encabezados que envía el servidor de destino o de backend como parte de la respuesta HTTP a Apigee Edge es mayor que el límite permitido en Apigee Edge. 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:

  1. Accede a la IU de Apigee Edge como usuario con una función adecuada.
  2. Cambia a la organización en la que deseas investigar el problema.

  3. Navega a la página Analizar > Supervisión de API > Investigar.
  4. Selecciona el período específico en el que observaste los errores.
  5. Puedes seleccionar el filtro Proxy para reducir el código de falla.
  6. Traza el Código de falla en función del Tiempo.
  7. Selecciona una celda que tenga el código de falla protocol.http.TooBigHeaders como se muestra a continuación:

    ( aumentar el tamaño de la imagen)

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

    ( aumentar el tamaño de la imagen)

  9. Haz clic en Ver registros y expande la fila de la solicitud fallida.

    ( aumentar el tamaño de la imagen)

  10. En la ventana Registros, ten en cuenta los siguientes detalles:
    • Código de estado: 502
    • Fuente de falla: target
    • Código de falla: protocol.http.TooBigHeaders.
  11. Si la Fuente de falla tiene el valor target y el Código de falla tiene el valor protocol.http.TooBigHeaders, eso indica que la respuesta HTTP del servidor de destino o de backend tiene encabezados cuyo tamaño es mayor que el límite permitido en Apigee Edge.

Herramienta Trace

  1. Habilita la sesión de seguimiento trace session y haz lo siguiente:
    1. Espera a que se produzca el error 502 Bad Gateway.
    2. Si puedes reproducir el problema, realiza la llamada a la API y reproduce el error 502 Bad Gateway.
  2. Selecciona una de las solicitudes fallidas y examina el seguimiento.
  3. Navega por las diferentes fases del seguimiento y ubica dónde se produjo la falla.
  4. Por lo general, verás este error en el flujo llamado Error justo después de la Solicitud enviada al servidor de destino fase como se muestra a continuación:

    ( aumentar el tamaño de la imagen)

    Ten en cuenta los valores del error del seguimiento:

    • error: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Esto indica que Apigee Edge (componente Message Processor) muestra el error as pronto como recibe la respuesta del servidor de backend debido a que el tamaño del encabezado supera el límite permitido.

  5. Verás la falla en la Respuesta enviada al cliente respuesta de error que envía Apigee Edge como se muestra a continuación:

    ( aumentar el tamaño de la imagen)

  6. Ten en cuenta los valores del error del seguimiento. El seguimiento de muestra anterior muestra lo siguiente:
    • Error: 502 Bad Gateway.
    • Contenido del error: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Navega a la fase AX (datos de Analytics registrados) en el seguimiento y haz clic en ella para ver los detalles relacionados.

    ( aumentar el tamaño de la imagen)

    Ten en cuenta el valor de lo siguiente:

    Encabezados de error Valor
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Contenido del error: Cuerpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:

  1. Si eres usuario de la nube privada, puedes usar los registros de acceso de NGINX para determinar la información clave sobre HTTP 502 Bad Gateway.
  2. Verifica los registros de acceso de NGINX:

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

    Donde: ORG, ENV y PORT# se reemplazan por valores reales.

  3. Busca para ver si hay errores 502 con el código de error protocol.http.TooBigHeaders durante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con 502.
  4. Si encuentras errores 502 con el X-Apigee-fault-code que coincida con el valor de protocol.http.TooBigHeaders, 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 error Valor
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Causa: El tamaño de los encabezados en la respuesta es mayor que el límite permitido

Diagnóstico

  1. Determina el Código de falla, la Fuente de falla y el Tamaño de la carga útil de la respuesta para el error observado con la Supervisión de API, la herramienta Trace o los registros de acceso de NGINX como se explica en Pasos comunes de diagnóstico.
  2. Si la Fuente de falla tiene el valor target, eso indica que la respuesta que envía el servidor de destino o de backend a Apigee tiene encabezados cuyo tamaño es mayor que el límite permitido en Apigee Edge.
  3. Puedes validar que la respuesta del destino o del backend tiene encabezados cuyo tamaño es mayor que el límite permitido con uno de los siguientes métodos:

    Mensaje de error

    Para validar con el mensaje de error, haz lo siguiente:

    Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, entonces consulta el faultstring. El faultstring indica que el tamaño del encabezado de respuesta superó el límite permitido.

    Mensaje de error de muestra:

    "faultstring":"response headers size exceeding 25,600"

    En el mensaje de error anterior, observa en el faultstringque la respuesta tiene encabezados cuyo tamaño total supera el límite permitido.

    Solicitud real

    Para validar con la solicitud real, haz lo siguiente:

    Si tienes acceso a la solicitud real realizada al servidor de destino o de backend, sigue estos pasos:

    1. Si eres usuario de la nube pública o privada, realiza una solicitud directamente al servidor de backend desde el propio servidor de backend o cualquier otra máquina desde la que tengas permiso para realizar la solicitud al servidor de backend.
    2. Si eres usuario de la nube privada, también puedes realizar la solicitud a el servidor de backend desde uno de los Message Processors.
    3. Examina la respuesta recibida del servidor de backend y, en particular, calcula y verifica el tamaño total de los encabezados que se pasan en la respuesta.
    4. Si descubres que el tamaño de los encabezados en la carga útil de la respuesta es mayor que el límite permitido en Apigee Edge, esa es la causa del problema.

      Esta es una muestra de una respuesta del servidor de destino:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      En el ejemplo anterior, Testheader1 y Testheader2 tienen tamaños más grandes, lo que es la causa de este error, ya que supera el límite permitido en Apigee Edge.

    Registros de Message Processor

    Para validar con los registros de Message Processor, haz lo siguiente:

    Si eres usuario de la nube privada, puedes usar los registros de Message Processor para validar si el tamaño de los encabezados de respuesta superó el límite permitido en Apigee Edge.

    1. Verifica los registros de Message Processor:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Busca para ver si hay errores 502 durante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con 502. Puedes usar la siguiente cadena de búsqueda:
      grep -ri "response headers size exceeding"
      
    3. Encontrarás líneas de system.log similares a las siguientes. El tamaño de los encabezados de respuesta puede variar en tu caso:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. En cuanto el Message Processor obtiene la respuesta del servidor de backend o de destino y descubre que el tamaño total de los encabezados es mayor que 25 KB, se detiene y muestra el error:

      response headers size exceeding 25,600

      Esto implica que el tamaño total del encabezado es mayor que 25 KB y Apigee muestra el error cuando el tamaño comienza a superar el límite de 25 KB con el código de falla como protocol.http.TooBigHeaders

Solución

Tamaño fijo

Opción 1 [recomendada]: Corrige la aplicación del servidor de destino para que no envíe un tamaño de encabezado que supere el límite de Apigee

  1. Analiza el motivo por el que el servidor de destino específico envía un tamaño de encabezado de respuesta mayor que el límite permitido, como se define en Límites.
  2. Si no es conveniente, modifica la aplicación del servidor de backend para que envíe los encabezados de respuesta cuyo tamaño sea menor que el límite permitido en Apigee Edge.
  3. Verifica si la información del encabezado se puede enviar como parte del cuerpo de la respuesta.
  4. Si es posible, envía cualquier información grande que planeabas enviar como parte de el encabezado en el cuerpo de la respuesta. Esto garantizará que no excedas el límite del encabezado de respuesta.

CwC

Opción 2 : Usa la propiedad CwC para aumentar el límite de tamaño del encabezado de respuesta

Apigee proporciona una propiedad CwC que le permite aumentar el límite de tamaño de los encabezados de respuesta. Para obtener más información, consulta Cómo configurar límites para el Message Processor

Límites

Apigee espera que la aplicación cliente y el servidor de backend no envíen tamaños de encabezado mayores que el límite permitido, como se documenta para el tamaño del encabezado de solicitud o respuesta en los límites de Apigee Edge.

  1. Si eres usuario de la nube pública, el límite máximo para el tamaño de los encabezados de solicitud y respuesta es el que se documenta para el tamaño del encabezado de solicitud o respuesta en los límites de Apigee Edge.
  2. Si eres usuario de la nube privada, es posible que hayas modificado el límite máximo predeterminado para el tamaño de los encabezados de solicitud y respuesta (aunque no es una práctica recomendada). Puedes determinar el límite máximo de tamaño del encabezado de respuesta siguiendo las instrucciones en Cómo verificar el límite actual.

¿Cómo verificar el límite actual?

En esta sección, se explica cómo verificar que la propiedad HTTPResponse.headers.limit se haya actualizado con un valor nuevo en los Message Processors.

  1. En la máquina Message Processor, busca la propiedad HTTPResponse.headers.limit en el directorio /opt/apigee/edge-message-processor/conf y verifica qué valor se estableció como se muestra a continuación:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. El resultado de muestra del comando anterior es el siguiente:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. En el resultado de ejemplo anterior, observa que la propiedad HTTPResponse.headers.limit se estableció con el valor 25k en http.properties.

    Esto indica que el límite para el tamaño de la carga útil de respuesta configurado en Apigee para la nube privada es de 25 KB.

Si aún necesitas asistencia de Apigee, consulta Se debe recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Recopila la siguiente información de diagnóstico y, luego, comunícate con 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
  • Comando curl completo que se usó para reproducir el error 502
  • Archivo de seguimiento de las solicitudes a la API
  • Resultado completo de la respuesta del servidor de destino o de backend junto con el tamaño de los encabezados

Si eres usuario de la nube privada, proporciona la siguiente información:

  • Mensaje de error completo observado para las solicitudes fallidas
  • Nombre de la organización
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento de las solicitudes a la API fallidas
  • Comando curl completo que se usó para reproducir el error 502
  • Resultado completo de la respuesta del servidor de destino o de backend junto con el tamaño de los encabezados
  • Registros de acceso de NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Donde: ORG, ENV y PORT# se reemplazan por valores reales.

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