Campos de encabezado de la solicitud demasiado grandes - TooBigHeaders

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 431 Request Header Fields Too Large con el código de error protocol.http.TooBigHeaders 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 431 Request Header Fields Too Large

Además, es posible que veas el siguiente mensaje de error:

{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Causas posibles

Este error ocurre si el tamaño total de todos los encabezados de solicitud que envía la aplicación cliente a Apigee Edge como parte de la solicitud HTTP es mayor que el límite permitido en Apigee Edge según RFC 6585, sección 5: 431 Campos de encabezado de solicitud demasiado grandes.

A continuación, se muestran las posibles causas de este error:

Causa Descripción Instrucciones de solución de problemas aplicables para
El tamaño de los encabezados de solicitud es mayor que el límite permitido El tamaño total de todos los encabezados que envía la aplicación cliente como parte de la solicitud 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 la API, sigue estos pasos:

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

  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.TooBigHeaders y el código de estado 431, 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.TooBigHeaders como se muestra a continuación:

    ( ver imagen más grande)

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

    ( ver imagen más grande)

  9. En la ventana Registros, ten en cuenta los siguientes detalles:

    • Código de estado: 431
    • Fuente de la falla: apigee
    • Código de fallas: protocol.http.TooBigHeaders.
    • Longitud de la solicitud(bytes): 32150 (> 25 KB)
  10. Si la fuente de errores tiene el valor apigee o MP, el código de error tiene el valor protocol.http.TooBigHeaders y la longitud de la solicitud es superior a 25 KB, lo que indica que el tamaño total de todos los encabezados de solicitud enviados por la aplicación cliente como parte de la solicitud HTTP es mayor que el límite permitido en Apigee.

Herramienta de seguimiento

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 de los errores HTTP 431.
  2. Verifica los registros de acceso de NGINX:

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

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

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

    La entrada de ejemplo anterior del registro de acceso de NGINX tiene los siguientes valores para X-Apigee-fault-code y X-Apigee-fault-code

    Encabezados de respuesta Valor
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    Ten en cuenta la longitud de la solicitud: 40159 (40 KB es mayor que 25 KB, el límite permitido para los encabezados de solicitud en Apigee Edge)

    En la entrada de registro de muestra anterior, X-Apigee-fault-source tiene el valor apigee o MP, X-Apigee-fault-code tiene el valor protocol.http.TooBigHeaders y la longitud de la solicitud es 40 KB, que es mayor que el límite permitido en Apigee: 25 KB. Esto indica claramente que el tamaño total de todos los encabezados de solicitud que envió la aplicación cliente como parte de la solicitud HTTP superó el límite permitido de 25 KB en Apigee Edge.

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

Diagnóstico

  1. Determina el código con errores, la fuente de errores y el tamaño de la longitud de la solicitud correspondiente al error observado con la supervisión de la API o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
  2. Si la fuente de errores tiene el valor apigee o MP, el código de falla tiene el valor protocol.http.TooBigHeaders y la longitud de la solicitud es superior a 25 KB, esto indica que el tamaño de la solicitud que envió la aplicación cliente a Apigee es mayor que el límite permitido en Apigee Edge.
  3. Puedes validar que el tamaño de los encabezados de solicitud superó el límite permitido de 25 KB mediante uno de los siguientes métodos:

    Mensaje de error

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

    Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, consulta la faultstring. El faultstring indica que el tamaño total de los encabezados de solicitud superó el límite permitido de 25 KB.

    Ejemplo de mensaje de error:

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

    Solicitud real

    Para validar el uso de la solicitud real, sigue estos pasos:

    Si tienes acceso a la solicitud real que realizó la aplicación cliente, sigue estos pasos:

    1. Verifica el tamaño de los encabezados que se pasaron en la solicitud.
    2. Si descubres que el tamaño total de los encabezados supera el límite permitido en Apigee Edge, esa es la causa del problema.

      Ejemplo de solicitud:

      curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
      

      En el caso anterior, el tamaño total de los encabezados header0, header1, header2 y header3 es superior a 25 KB, es decir, contiene más de 25, 000 caracteres ASCII (bytes).

      Si usas algún otro cliente, puedes revisar los registros del cliente y tratar de averiguar el tamaño de la línea de solicitud que se envía a Apigee Edge.

    Registros de Message Processor

    Para validar el uso de 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 solicitud 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. Realiza una búsqueda para ver si hay errores 431 durante un período específico (si el problema ocurrió en el pasado) o si hay solicitudes que aún fallan con 431. Puedes usar las siguientes strings de búsqueda.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Encontrarás líneas de system.log similares a estas:
      2021-07-27 08:30:28,419  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() :
      Request:GET, uri:/test/, message Id:null,
      exception:com.apigee.errors.http.user.RequestHeadersTooLarge{
      code = protocol.http.TooBigHeaders, message = request headers size
      exceeding 25,600, associated contexts = []}, context:Context@9c5903
      input=ClientInputChannel(SSLClientChannel[Accepted:
      Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130
      useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms  lastIO=0ms
      isOpen=true)
      

      El texto message = request headers size exceeding 25,600 en el mensaje de error anterior indica que el tamaño total de los encabezados de solicitud es de más de 25 KB. Por lo tanto, Apigee Edge genera la excepción com.apigee.errors.http.user.RequestHeadersTooLarge y muestra el código de estado 431 con el código de falla protocol.http.TooBigHeaders a las aplicaciones cliente.

Resolución

Corregir tamaño

Opción 1 (recomendada]: Corrige la aplicación cliente para que no envíe encabezados de solicitud con un tamaño total mayor que el límite permitido

  1. Analiza el motivo por el que el cliente específico envía un encabezado de solicitud con un tamaño grande, lo que hace que el tamaño total del encabezado sea mayor que el límite permitido, según se define en Límites.
  2. Si no lo deseas, modifica tu aplicación cliente para que envíe encabezados de solicitud de un tamaño inferior al límite permitido.

    En el ejemplo anterior, puedes solucionar el problema si pasas el parámetro de valores de encabezado largo como parte del cuerpo de la solicitud o la carga útil:

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. Si es conveniente y quieres enviar un encabezado que supere el límite permitido, ve a la siguiente opción.

CwC

Opción 2 : Usar la propiedad CwC para aumentar el límite de líneas de solicitud

Apigee proporciona una propiedad CwC que le permite aumentar el límite de tamaño de la línea de solicitud. Para obtener más información, consulta Cómo establecer el límite de líneas de solicitud en Message Processor.

Límites

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

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

¿Cómo puedo verificar el límite actual?

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

  1. En la máquina del procesador de mensajes, busca la propiedad HTTPRequest.headers.limit en el directorio /opt/apigee/edge-message-processor/conf y verifica qué valor se configuró como se muestra a continuación:
    grep -ri "HTTPRequest.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:HTTPRequest.headers.limit=25k
    
  3. En el resultado de ejemplo anterior, ten en cuenta que la propiedad HTTPRequest.headers.limit se configuró con el valor 25k en http.properties.

    Esto indica que el límite del tamaño del encabezado de solicitud configurado en Apigee para la nube privada es de 25 KB.

Especificación

Apigee Edge espera que la aplicación cliente no envíe encabezados de gran tamaño como parte de la solicitud. En caso de que la solicitud contenga encabezados con un tamaño total superior al límite especificado, Apigee arroja 431 Request Header Fields Too Large de acuerdo con las siguientes especificaciones de RFC:

Especificación
RFC 6585, sección 5: Campos de encabezado de solicitud demasiado grandes

Si aún necesitas asistencia de la asistencia de Apigee, consulta Debes 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 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 error 431.
  • 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 de la organización
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento de las solicitudes a la API fallidas
  • Completa el comando curl que se usa para reproducir el error 431.
  • Registros de acceso de NGINX/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

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