Campos de encabezado de la solicitud demasiado grandes - TooBigHeaders

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

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, puedes observar el siguiente mensaje de error:

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

Causas posibles

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

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 de solicitud supera el límite permitido El tamaño total de todos los encabezados enviados por la aplicación cliente como parte de la solicitud HTTP a Apigee Edge supera el límite permitido en Apigee Edge. 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 falla protocol.http.TooBigHeaders y 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 con errores:

    ( ver imagen más grande)

  9. En la ventana Registros, observa los siguientes detalles:

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

Herramienta de seguimiento

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 431 de 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 431 durante una duración específica (si el problema ocurrió en el pasado) o si todavía hay solicitudes que fallan 431
  4. Si encuentras algún error 431 con el código X-Apigee-fault-code coincide con el valor de protocol.http.TooBigHeaders y, luego, determina el valor de X-Apigee-fault-source.

    La entrada de ejemplo 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.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 encabezados de solicitudes 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 de 40 KB, que es es superior al límite permitido en Apigee: 25 KB. Esto indica claramente que tamaño total de todos los encabezados de la solicitud que envía la aplicación cliente como parte del protocolo HTTP superó el límite permitido de 25 KB en Apigee Edge.

Causa: El tamaño de los encabezados de solicitud supera el límite permitido

Diagnóstico

  1. Determina el Fault Code, la Fault Source y el Request-Length size del tamaño de la error observado con la supervisión de API o los registros de acceso de NGINX, como se explica en Pasos comunes del diagnóstico.
  2. Si la Fuente del error tiene el valor apigee o MP, Fault Code tiene el valor protocol.http.TooBigHeaders y la Longitud de la solicitud es superior a 25 KB, entonces este indica que el tamaño de la solicitud enviada por 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 haya superado el límite permitido de 25 KB usando 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, consulta faultstring. El faultstring indica que el tamaño total de los encabezados de la 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 con la solicitud real, haz lo siguiente:

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

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

      Solicitud de muestra:

      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 y header2 y header3 supera los 25 KB, es decir, contiene más de 25,000 caracteres ASCII (bytes).

      Si usas otro cliente, puedes revisar sus registros intenta averiguar el tamaño de la línea de solicitud que se envía a Apigee Edge.

    Registros del procesador de mensajes

    Para realizar la validación con los registros de Message Processor, haz lo siguiente:

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

    1. Revisa los registros de Message Processor:

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

    2. Realiza una búsqueda para ver si hay algún error 431 durante una acción específica Si el problema ocurrió en el pasado o si hay solicitudes Sigue fallando con 431. Puedes usar las siguientes cadenas de búsqueda.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Encontrarás líneas de system.log similares a las siguientes:
      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 la anterior indica que el tamaño total de los encabezados de solicitud es superior a 25 KB. Por lo tanto, Apigee Edge arroja la excepción com.apigee.errors.http.user.RequestHeadersTooLarge y devoluciones Código de estado 431 con código de falla protocol.http.TooBigHeaders a las aplicaciones cliente.

Solución

Corregir tamaño

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

  1. Analiza el motivo por el que el cliente específico envía un encabezado de la solicitud con un tamaño 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 es lo deseable, modifica la aplicación cliente para que envíe Encabezados de solicitud con un tamaño inferior al límite permitido

    En el ejemplo anterior, puedes corregir el problema pasando el encabezado largo value como parte del cuerpo de la solicitud o de 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 te resulta conveniente y quieres enviar un encabezado que supere el límite permitido, dirígete a la la siguiente opción.

CwC

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

Apigee proporciona un 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/respuesta cuyos tamaños son superiores al límite permitido según se documenta para el límite de tamaño del encabezado 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 El tamaño de los encabezados de solicitud y respuesta es el que se documenta para Tamaño de encabezado de solicitud/respuesta en Límites de Apigee Edge.
  2. Si eres un usuario de la nube privada, es posible que hayas modificado el valor máximo predeterminado límite de tamaño para los encabezados de solicitud y respuesta (aunque no es una práctica recomendada). Para determinar el límite de tamaño máximo del encabezado de solicitud, sigue las instrucciones 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 tenga con un nuevo valor en Message Processors.

  1. En la máquina del procesador de mensajes, busca la propiedad. HTTPRequest.headers.limit en directorio /opt/apigee/edge-message-processor/conf y verifica en ve 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 estableció con el valor 25k en http.properties.

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

Especificación

Apigee Edge espera que la aplicación cliente no envíe encabezados de gran tamaño como parte del para cada 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 el siguiente RFC específicas:

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

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 431
  • 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 de la organización
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de registro de las solicitudes a la API con errores
  • 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: 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