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 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, puedes observar 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 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 es mayor que el límite permitido en Apigee Edge.
Antes de ver las posibles causas de este error, veamos cuál es la línea de solicitud y cómo comprobar su tamaño.
Descripción de la línea de solicitud
Una solicitud HTTP típica consta de tres partes:
- Línea de solicitud
- ( Conjunto de encabezados HTTP)
- [ 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 se dirige el servidor contiene la línea de solicitud que se describió anteriormente. Le sigue el encabezados y el cuerpo de la solicitud o la carga útil.
En la siguiente captura de pantalla de ejemplo, se muestra una solicitud curl
típica, la Solicitud.
(junto con la línea de solicitud) y la parte Respuesta.
Información sobre el tamaño de la línea de solicitud
- En el ejemplo anterior, la línea start (primera línea) en la solicitud también
conocida como línea de solicitud, se define de la siguiente manera:
GET /test/ HTTP/1.1
El tamaño de la línea de solicitud es
~19 bytes
, ya que contiene19 ASCII characters
Dado que este se encuentra dentro del límite permitido en Apigee Edge, la solicitud se procesa sin errores y obtienes una respuesta exitosa. - Del mismo modo, si observas
faultstring
en El mensaje de error que se muestra arriba contiene"request line size exceeding 7,168"
. Esto indica que la línea de solicitud en la solicitud HTTP que realizó el cliente superó 7,168 bytes.
Estas son 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 supera el límite permitido | El tamaño del URI de solicitud que envía la aplicación cliente como parte del protocolo HTTP 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:
- Accede a la IU de Apigee Edge como usuario con un el puesto adecuado.
Cambia a la organización en la que quieres investigar el problema.
- Navega a Analyze > Supervisión de API > Investigar.
- Selecciona el período específico en el que observaste los errores.
- Traza Código de error en Tiempo.
- Selecciona una celda que tenga el código de falla
protocol.http.TooBigLine
y código de estado414
, como se muestra a continuación: Verás la información sobre el código de falla
protocol.http.TooBigline
. como se muestra a continuación:Haz clic en Ver registros y expande la fila de la solicitud con errores:
En la ventana Registros, observa los siguientes detalles:
- Código de estado:
414
- Fuente del error:
apigee
- Código de error:
protocol.http.TooBigLine
. - Longitud de la solicitud(bytes):
7244 (> 7KB)
- Código de estado:
- Si la Fuente del error tiene el valor
apigee
oMP
, la Fault Code tiene el valorprotocol.http.TooBigLine
y Request-Length es mayor a 7 KB, entonces, eso 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, haz lo siguiente:
- 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
414
de HTTP. 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.
- Realiza una búsqueda para ver si hay algún error
414
durante una duración específica (si el problema ocurrió en el pasado) o si todavía hay solicitudes que fallan414
Si encuentras algún error
414
con el código X-Apigee-fault-code coincide con el valor deprotocol.http.TooBigLine
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.TooBigLine
X-Apigee-fault-source policy
Ten en cuenta la longitud de la solicitud:
7244
(7.244 KB > límite permitido)
Causa: El tamaño de la carga útil de la solicitud supera el límite permitido
Diagnóstico
- 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, la herramienta de seguimiento o los registros de acceso NGINX, como se explica en Pasos comunes del diagnóstico.
- Si la Fuente del error tiene el valor
apigee
oMP
, 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. - Puedes validar que el tamaño de la línea de solicitud haya superado el límite permitido de 7 KB mediante una de las siguientes opciones:
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
. Elfaultstring
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 con la solicitud real, haz lo siguiente:
Si tienes acceso a la solicitud real que realizó la aplicación cliente, Luego, sigue estos pasos:
- Verifica el tamaño del URI que se pasó en la solicitud.
Si observas que el tamaño del URI es mayor que el límite permitido en Apigee Edge, entonces la causa del problema.
Solicitud de muestra:
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 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 la línea de solicitud superó el límite permitido en Apigee Edge.
Revisa los registros de Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Realiza una búsqueda para ver si hay algún error
414
durante un Si el problema ocurrió en el pasado o si hay solicitudes Sigue fallando con414
. Puedes usar las siguientes cadenas de búsqueda.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Encontrarás líneas de
system.log
similares a las siguientes: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 la anterior mensaje de error indica que el tamaño del URI de solicitud es superior a 7 KB. Por lo tanto, Apigee Edge arroja la excepcióncom.apigee.errors.http.user.RequestURITooLong
y devoluciones Código de estado414
con código de fallaprotocol.http.TooBigline
a las aplicaciones cliente.
Solució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
- 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.
Si no es lo deseable, modifica la aplicación cliente para que envíe el URI de solicitud. inferior al límite permitido.
En el ejemplo anterior, puedes corregir el problema pasando la consulta larga como parte del cuerpo de la solicitud o de la carga útil, en lugar de pasarlos como parte del solicitar una URL, como se muestra a continuación:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- Si es deseable y quieres enviar un URI más que el límite permitido, dirígete a la opciones siguientes.
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 solicitudes ni líneas de respuesta cuyos tamaños sean superiores al límite permitido que se documenta para Límite de líneas de solicitud/respuesta en Límites de Apigee Edge.
- Si eres usuario de la nube pública, el límite máximo de solicitudes y El tamaño de la línea de respuesta es el que se documenta para Tamaño de la línea de respuesta/solicitud en Límites de Apigee Edge.
- Si eres un usuario de la nube privada, es posible que hayas modificado el valor máximo predeterminado límite para el tamaño de la solicitud y la línea de respuesta (aunque no es una práctica recomendada). Para determinar el límite máximo de tamaño de la línea 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.line.limit
tenga
con un nuevo valor en Message Processors.
- En la máquina del procesador de mensajes, busca la propiedad.
HTTPRequest.line.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.line.limit" /opt/apigee/edge-message-processor/conf
- El resultado de muestra del comando anterior es el siguiente:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
En el resultado de ejemplo anterior, ten en cuenta que la propiedad
HTTPRequest.line.limit
se estableció con el valor7k
enhttp.properties
.Esto indica que el límite para el tamaño de la línea de solicitud configurado en Apigee para Cloud es de 7 KB.
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 error414
- 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 error414
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