URI de solicitud 414 demasiado largo - TooBigLine

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 414 Request-URI Too Long con el código de error protocol.http.TooBigLine 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 414 Request-URI Too Long

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

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Ten en cuenta que la faultstring del mensaje de error anterior contiene el límite permitido para la línea de solicitud en Apigee Edge, que es de 7168 bytes (7 KB).

Causas posibles

Este error ocurre si el tamaño de la línea de solicitud que envía la aplicación cliente a Apigee Edge como parte de la solicitud HTTP supera el límite permitido en Apigee Edge.

Antes de analizar las posibles causas de este error, veamos qué significa la línea de solicitud y cómo verificar su tamaño.

Información sobre la línea de solicitud

Una solicitud HTTP típica consta de tres partes:

  1. Línea de solicitud
  2. ( Conjunto de encabezados HTTP)
  3. [ Cuerpo ]

La línea de solicitud consta de tres partes, como se muestra a continuación.

Request-Line = <Method> <Request-URI> <HTTP-Version>

Cuando la aplicación cliente realiza una solicitud HTTP a un servidor, la primera línea que va al servidor contiene la línea de solicitud descrita anteriormente. A esto le siguen los encabezados, el cuerpo de la solicitud y la carga útil.

En la siguiente captura de pantalla de ejemplo, se muestra una solicitud curl típica, la parte de solicitud (junto con la línea de solicitud) y la parte de respuesta.

Información sobre el tamaño de la línea de solicitudes

  1. En el ejemplo que se analizó anteriormente, la línea de inicio (primera línea) de la solicitud, también denominada línea de solicitud, es la siguiente:
    GET /test/ HTTP/1.1
    

    El tamaño de la línea de solicitud es ~19 bytes, ya que contiene 19 ASCII characters. Dado que está dentro del límite permitido en Apigee Edge, la solicitud se procesa sin ningún error y obtienes una respuesta correcta.

  2. De manera similar, si observas faultstring en el mensaje de error que se muestra arriba, entonces, contiene "request line size exceeding 7,168". Esto indica que la línea de solicitud en la solicitud HTTP que realizó el cliente superó los 7,168 bytes.

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 la carga útil de la solicitud es mayor que el límite permitido. El tamaño del URI de solicitud 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.TooBigLine y el código de estado 414, 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.TooBigline 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: 414
    • Fuente de la falla: apigee
    • Código de fallas: protocol.http.TooBigLine.
    • Longitud de la solicitud(bytes): 7244 (> 7KB)
  10. Si la fuente de errores tiene el valor apigee o MP, el código de falla tiene el valor protocol.http.TooBigLine y Request-Length es más de 7 KB, lo que indica que la solicitud HTTP del cliente tiene un URI de solicitud 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 414.
  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 414 durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con 414.
  4. Si encuentras algún error 414 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.TooBigLine
    X-Apigee-fault-source policy

    Ten en cuenta el longitud de la solicitud: 7244 (7.244 KB > límite permitido)

Causa: El tamaño de la carga útil de la solicitud es mayor que el límite permitido

Diagnóstico

  1. Determina el código con errores, la fuente de la falla y el tamaño de la longitud de la solicitud del error observado con la supervisión de la API, la Herramienta de seguimiento o los registros de NGINX Access, como se explica en Pasos comunes de diagnóstico.
  2. Si Fuente con errores tiene el valor apigee o MP, 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 la línea de solicitud superó el límite permitido de 7 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 de la línea de solicitud superó el límite permitido de 7 KB.

    Ejemplo de mensaje de error:

    "faultstring":"request line size exceeding 7,168"
    

    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 del URI que se pasa en la solicitud.
    2. Si descubres que el tamaño del URI supera el límite permitido en Apigee Edge, entonces esa es la causa del problema.

      Ejemplo de solicitud:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      En el caso anterior, el valor del parámetro de consulta qparam es superior a 7 KB, es decir, contiene más de 7,000 caracteres ASCII.

      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 la línea 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. Busca para ver si hay errores 414 durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con 414. Puedes usar las siguientes strings de búsqueda.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Encontrarás líneas de system.log similares a estas:
      2021-07-12 08:53:31,461  NIOThread@0 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() : Request:null, uri:null,
      message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{
      code = protocol.http.TooBigLine, message = request line size exceeding 7,168,
      associated contexts = []}, context:Context@366f4217
      input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443
      Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849
      age=2254670ms lastIO=0ms isOpen=true)
      

      El texto message = request line size exceeding 7,168 en el mensaje de error anterior indica que el tamaño del URI de solicitud supera los 7 KB. Por lo tanto, Apigee Edge genera la excepción com.apigee.errors.http.user.RequestURITooLong y muestra el código de estado 414 con el código de falla protocol.http.TooBigline a las aplicaciones cliente.

Resolución

Corregir tamaño

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

  1. Analiza el motivo por el que el cliente específico envía un tamaño de URI de solicitud superior al límite permitido, según se define en Límites.
  2. Si no lo deseas, modifica tu aplicación cliente para que envíe un tamaño de URI de solicitud menor que el límite permitido.

    En el ejemplo anterior, puedes solucionar el problema si pasas el parámetro de consulta larga como parte del cuerpo de la solicitud o la carga útil, en lugar de pasarlo como parte de la URL de la solicitud, como se muestra a continuación:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Si es conveniente y quieres enviar un URI superior al límite permitido, ve a las siguientes opciones.

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 solicitudes ni líneas de respuesta cuyos tamaños sean mayores que el límite permitido, como se documenta en Límite de línea de solicitudes/respuestas 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 solicitud y línea de respuesta es el que se documenta para Tamaño de solicitud/línea de respuesta en Límites de Apigee Edge.
  2. Si eres un usuario de la nube privada, es posible que hayas modificado el límite máximo predeterminado del tamaño de solicitud y de la línea de respuesta (aunque no sea una práctica recomendada). Para determinar el límite de tamaño máximo de la línea 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.line.limit se haya actualizado con un valor nuevo en Message Processor.

  1. En la máquina del procesador de mensajes, busca la propiedad HTTPRequest.line.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.line.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.line.limit=7k
    
  3. En el resultado de ejemplo anterior, ten en cuenta que la propiedad HTTPRequest.line.limit se configuró con el valor 7k en http.properties.

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

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 414.
  • 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 414.
  • 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