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 502 Bad Gateway
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 502 Bad Gateway
Además, es posible que veas el siguiente mensaje de error:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Causas posibles
Este error ocurre si el tamaño total de los encabezados que envía el servidor de destino o backend a Apigee Edge como parte de la respuesta HTTP es mayor que el límite permitido en Apigee Edge.
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 la respuesta es mayor que el límite permitido | El tamaño del encabezado de un encabezado en particular o la suma de los tamaños de los encabezados de todos los encabezados que envía el servidor de destino o backend como parte de la respuesta HTTP a Apigee Edge supera 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:
- Accede a la IU de Apigee Edge como un usuario con el rol adecuado.
Cambia a la organización en la que quieres investigar el problema.
- Navega a la página Analyze > API Monitoring > Investigate.
- Selecciona el período específico en el que observaste los errores.
- Puedes seleccionar el filtro Proxy para acotar el código de falla.
- Traza el código de falla en función del valor Time.
Selecciona una celda que tenga el código de falla
protocol.http.TooBigHeaders
, como se muestra a continuación:Verás la información sobre el código de falla
protocol.http.TooBigHeaders
como se muestra a continuación:Haz clic en Ver registros y expande la fila de la solicitud con errores.
- En la ventana Registros, ten en cuenta los siguientes detalles:
- Código de estado:
502
- Fuente de la falla:
target
- Código de fallas:
protocol.http.TooBigHeaders
.
- Código de estado:
- Si Fuente de errores tiene el valor
target
y Código de fallas tiene el valorprotocol.http.TooBigHeaders
, eso indica que la respuesta HTTP del servidor de destino o backend tiene encabezados con un tamaño mayor que el límite permitido en Apigee Edge.
Herramienta de seguimiento
- Habilita la sesión de seguimiento y realiza una de estas acciones:
- Espera a que ocurra el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza la llamada a la API y reproduce el error
502 Bad Gateway
.
- Espera a que ocurra el error
- Selecciona una de las solicitudes con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
Por lo general, verás este error en el flujo denominado Error justo después de la fase Solicitud enviada al servidor de destino, como se muestra a continuación:
Observa los valores del error del seguimiento:
- error:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Esto indica que Apigee Edge (componente de procesador de mensajes) genera el error en cuanto recibe la respuesta del servidor de backend debido a que el tamaño del encabezado supera el límite permitido.
- error:
Verás el error en la respuesta de error Response Sent to Client enviada por Apigee Edge, como se muestra a continuación:
- Anota los valores del error del seguimiento. En el seguimiento de ejemplo anterior, se muestra lo siguiente:
- Error:
502 Bad Gateway
. - Contenido del error:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Error:
Navega a la fase AX (datos registrados de Analytics) del seguimiento y haz clic en ella para ver los detalles relacionados.
Ten en cuenta el valor de lo siguiente:
Encabezados de error Valor X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Contenido del error: Cuerpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
Para diagnosticar el error con los registros de acceso de NGINX, sigue estos pasos:
- Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para determinar la información clave de
502 Bad Gateway
de HTTP. 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.
- Busca para ver si hay errores
502
con el código de errorprotocol.http.TooBigHeaders
durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con502
. Si encuentras algún error
502
con el código X-Apigee-fault-code que coincide con el valor deX-Apigee-fault-code , determina el valor de X-Apigee-fault-codeEjemplo de error 502 del registro de acceso de NGINX:
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 error Valor X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Causa: El tamaño de los encabezados de la respuesta supera el límite permitido
Diagnóstico
- Determina el código con fallas, la fuente de errores y el tamaño de la carga útil de la respuesta del error observado con la supervisión de la API, la herramienta de Trace o los registros de NGINX Access, como se explica en Pasos comunes de diagnóstico.
- Si Fuente de errores tiene el valor
target
, esto indica que la respuesta que envió el servidor de destino o backend a Apigee tiene encabezados con un tamaño mayor que el límite permitido en Apigee Edge. - Puedes validar que la respuesta del destino o backend tenga encabezados cuyo tamaño sea mayor que el límite permitido 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
. Elfaultstring
indica que el tamaño del encabezado de respuesta superó el límite permitido.Ejemplo de mensaje de error:
"faultstring":"response headers size exceeding 25,600"
En el mensaje de error anterior, ten en cuenta en
faultstring
que la respuesta tiene encabezados cuyo tamaño total supera el límite permitido.Solicitud real
Para validar el uso de la solicitud real, sigue estos pasos:
Si tienes acceso a la solicitud real realizada al servidor de destino o backend, realiza los siguientes pasos:
- Si eres un usuario de nube pública o nube privada, realiza una solicitud directamente al servidor de backend desde el servidor de backend o desde cualquier otra máquina desde la que tengas permiso para realizar la solicitud al servidor de backend.
- Si eres un usuario de la nube privada, también puedes realizar la solicitud al servidor de backend desde uno de los procesadores de mensajes.
- Examina la respuesta recibida del servidor de backend y, en particular, calcula y verifica el tamaño total de los encabezados que se pasaron en la respuesta.
Si descubres que el tamaño de los encabezados en la carga útil de respuesta supera el límite permitido en Apigee Edge, entonces esa es la causa del problema.
Respuesta de muestra del servidor de destino:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactEn el ejemplo anterior,
Testheader1
yTestheader2
tienen tamaños más altos, que es la causa del error, ya que supera el límite permitido en 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 respuesta superó el límite permitido en Apigee Edge.
Verifica los registros de Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Realiza una búsqueda para ver si hay errores
502
durante un período específico (si el problema ocurrió en el pasado) o si hay solicitudes que aún fallan con502
. Puedes usar la siguiente string de búsqueda:grep -ri "response headers size exceeding"
- Encontrarás líneas de
system.log
similares a las siguientes. El tamaño de los encabezados de respuesta puede variar en tu caso:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
Tan pronto como Message Processor obtiene la respuesta del servidor de destino o backend y detecta que el tamaño total de los encabezados supera los 25 KB, se detiene y arroja el siguiente error:
response headers size exceeding 25,600
Implica que el tamaño total del encabezado es superior a 25 KB y Apigee arroja el error cuando el tamaño comienza a superar el límite de 25 KB con el código de falla como
protocol.http.TooBigHeaders
.
Resolución
Corregir tamaño
Opción 1 (recomendada]: Corrige la aplicación del servidor de destino para que no envíe encabezados que superen el límite de Apigee
- Analiza el motivo por el que el servidor de destino específico envía un tamaño de encabezado de respuesta que supere el límite permitido, según se define en Límites.
- Si no es conveniente, modifica la aplicación de servidor de backend para que envíe los encabezados de respuesta que tengan un tamaño inferior al límite permitido en Apigee Edge.
- Verifica si la información del encabezado se puede enviar como parte del cuerpo de la respuesta.
- Si es posible, envía cualquier información grande que planeas enviar como parte del encabezado en el cuerpo de la respuesta. Esto garantizará que no superes el límite del encabezado de respuesta.
CwC
Opción 2 : Usar la propiedad CwC para aumentar el límite de tamaño del encabezado de respuesta
Apigee proporciona una propiedad CwC que le permite aumentar el límite de tamaño de los encabezados de respuesta. Para obtener más información, consulta Configura límites para Message Processor
Límites
Apigee espera que la aplicación cliente y el servidor de backend no envíen tamaños de encabezado mayores que el límite permitido, como se documenta para el tamaño del encabezado de solicitud/respuesta en Límites de Apigee Edge.
- 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.
- Si eres un 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). Para determinar el límite de tamaño máximo del encabezado de respuesta, 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 HTTPResponse.headers.limit
se haya actualizado con un valor nuevo en Message Processor.
- En la máquina del procesador de mensajes, busca la propiedad
HTTPResponse.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 "HTTPResponse.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:HTTPResponse.headers.limit=25k
En el resultado de ejemplo anterior, ten en cuenta que la propiedad
HTTPResponse.headers.limit
se configuró con el valor25k
enhttp.properties
.Esto indica que el límite del tamaño de la carga útil de respuesta configurado en Apigee para la nube privada es de 25 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 error502
. - Archivo de seguimiento para las solicitudes a la API
- Resultado completo de la respuesta desde el servidor de destino/backend junto con el tamaño de los encabezados
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 error502
. - Resultado completo de la respuesta desde el servidor de destino/backend junto con el tamaño de los encabezados
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