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 de 431 Request Header Fields Too
Large con el 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 431 Request Header Fields Too Large
Además, es posible que observes 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 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: Campos de encabezado de 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 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 API, haz lo siguiente:
- Accede a la IU de Apigee Edge como usuario con una función adecuada.
Cambia a la organización en la que deseas investigar el problema.
- Navega a la página Analizar > Supervisión de API > Investigar.
- Selecciona el período específico en el que observaste los errores.
- Traza el código de falla en función del tiempo.
- Selecciona una celda que tenga el código de falla
protocol.http.TooBigHeadersy código de estado431, como se muestra a continuación:( aumentar el tamaño de la imagen)
Verás la información sobre el código de falla
protocol.http.TooBigHeaderscomo se muestra a continuación:( aumentar el tamaño de la imagen)
Haz clic en Ver registros y expande la fila de la solicitud con errores:
( aumentar el tamaño de la imagen)
En la ventana Registros, ten en cuenta los siguientes detalles:
- Código de estado:
431 - Fuente de falla:
apigee - Código de falla:
protocol.http.TooBigHeaders - Longitud de la solicitud(bytes):
32150 (> 25 KB)
- Código de estado:
- Si la fuente de falla tiene el valor
apigeeoMP, el código de falla tiene el valorprotocol.http.TooBigHeadersy la longitud de la solicitud es superior a 25 KB, esto indica que el tamaño total de todos los encabezados de solicitud que envía la aplicación cliente como parte de la solicitud HTTP es mayor que el límite permitido en Apigee.
Herramienta de Trace
NGINX
Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:
- Si eres usuario de la nube privada, puedes usar los registros de acceso de NGINX para
determinar la información clave sobre los errores HTTP
431. Consulta los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDonde: ORG, ENV y PORT# se reemplazan por valores reales.
- Busca si hay errores
431durante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con431. Si encuentras errores
431con el X-Apigee-fault-code que coincida con el valor deprotocol.http.TooBigHeaders, determina el valor de X-Apigee-fault-source.
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 respuesta Valor X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source MPTen 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
apigeeoMP, X-Apigee-fault-code tiene el valorprotocol.http.TooBigHeadersy la longitud de la solicitud es de 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 envía 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
- Determina el código de falla, la fuente de falla y el tamaño de la longitud de la solicitud para el error observado con la supervisión de API o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si la fuente de falla tiene el valor
apigeeoMP, el código de falla tiene el valorprotocol.http.TooBigHeaders, y la longitud de la solicitud es superior a 25 KB, esto indica que el tamaño de la solicitud que envía la aplicación cliente a Apigee es mayor que el límite permitido en Apigee Edge. - Puedes validar que el tamaño de los encabezados de solicitud superó el límite permitido de 25 KB 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. Elfaultstringindica que el tamaño total de los encabezados de solicitud superó el límite permitido de 25 KB.Mensaje de error de muestra:
"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, sigue estos pasos:
- Verifica el tamaño de los encabezados que se pasan en la solicitud.
Si descubres que el tamaño total de los encabezados es mayor que el límite permitido en Apigee Edge, esa es 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,header2, yheader3es mayor que 25 KB, es decir, contiene más de 25 K 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 del Message Processor
Para validar con los registros del Message Processor, haz lo siguiente:
Si eres usuario de la nube privada, puedes usar los registros del Message Processor para validar si el tamaño de los encabezados de solicitud superó el límite permitido en Apigee Edge.
Consulta los registros del Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Busca si hay errores
431durante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con431. Puedes usar las siguientes cadenas de búsqueda.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Encontrarás líneas de
system.logsimilares 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,600en el mensaje de error anterior indica que el tamaño total de los encabezados de solicitud es superior a 25 KB. Por lo tanto, Apigee Edge genera la excepcióncom.apigee.errors.http.user.RequestHeadersTooLargey muestra el código de estado431con el código de fallaprotocol.http.TooBigHeadersa las aplicaciones cliente.
Solución
Tamaño fijo
Opción 1 [recomendada]: Corrige la aplicación cliente para que no envíe encabezados de solicitud con un tamaño total superior al límite permitido
- Analiza el motivo por el que el cliente específico envía el encabezado de solicitud con un tamaño grande que hace que el tamaño total del encabezado sea superior al límite permitido, como se define en Límites.
Si no es deseable, modifica tu aplicación cliente para que envíe encabezados de solicitud de un tamaño inferior al límite permitido.
En el ejemplo que se analizó anteriormente, puedes solucionar el problema pasando el parámetro de valores de encabezado largo como parte del cuerpo o la carga útil de la solicitud:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- Si es deseable y quieres enviar un encabezado superior al límite permitido, ve a 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 una propiedad CwC que le permite aumentar el límite de tamaño de la línea de solicitud. Para obtener más detalles, consulta Establece el límite de la línea de solicitud en el 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 encabezado de solicitud o respuesta en Límites de Apigee Edge.
- 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 de encabezado de solicitud o respuesta en Límites de Apigee Edge.
- 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 solicitud 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 HTTPRequest.headers.limit se
haya actualizado con un valor nuevo en los Message Processors.
- En la máquina del Message Processor, busca la propiedad
HTTPRequest.headers.limiten el/opt/apigee/edge-message-processor/confdirectorio y verifica qué valor se configuró, como se muestra a continuación:grep -ri "HTTPRequest.headers.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.headers.limit=25k
En el resultado de ejemplo anterior, ten en cuenta que la propiedad
HTTPRequest.headers.limitse configuró con el valor25kenhttp.properties.Esto indica que el límite para el tamaño del encabezado de solicitud configurado en Apigee para la nube privada es 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 genera 431 Request Header Fields Too Large según las siguientes especificaciones de RFC
| Especificación |
|---|
| RFC 6585, sección 5: Campos de encabezado de solicitud 431 demasiado grandes |
Si aún necesitas asistencia de 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
curlcompleto que se usó para reproducir el error431 - Archivo de seguimiento de las solicitudes a la API
Si eres 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 con errores
- Comando
curlcompleto que se usó para reproducir el error431 Registros de acceso de NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDonde: ORG, ENV y PORT# se reemplazan por valores reales.
- Registros del sistema del Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log