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 502 Bad Gateway
con
código de error protocol.http.TooBigHeaders
como respuesta a la API
llamadas.
Mensaje de error
La aplicación cliente obtiene el siguiente código de respuesta:
HTTP/1.1 502 Bad Gateway
Además, puedes observar el siguiente mensaje de error:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Causas posibles
Este error se produce si el tamaño total de los encabezados enviados por el destino o backend de servidor a Apigee Edge como parte de la respuesta HTTP sea mayor que la cantidad permitida límite permitido en Apigee Edge.
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 la respuesta supera el límite permitido | El tamaño del encabezado de un encabezado en particular o la suma de los tamaños del encabezado de encabezados enviados por el servidor de destino o backend como parte de la respuesta 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:
- 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.
- Puedes seleccionar el filtro Proxy para acotar el código de falla.
- Traza Código de error en Tiempo.
Selecciona una celda que tenga el código de error
protocol.http.TooBigHeaders
como 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, observa los siguientes detalles:
- Código de estado:
502
- Fuente del error:
target
- Código de error:
protocol.http.TooBigHeaders
.
- Código de estado:
- Si la Fault Source tiene el valor
target
y la Fault Code tiene el valorprotocol.http.TooBigHeaders
, lo que indica La respuesta HTTP del servidor de destino o backend tiene encabezados cuyo tamaño es mayor que el límite permitido en Apigee Edge.
Herramienta de seguimiento
- Habilita la sesión de seguimiento.
y:
- Espera a que se produzca 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 se produzca el error
- Selecciona una de las solicitudes fallidas y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde se produjo la falla para determinar si se produjo un error.
Generalmente, verás este error en el flujo llamado Error justo después del Solicitud enviada al servidor de destino, como se muestra a continuación:
Toma nota de 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) arroja el error como en cuanto recibe la respuesta del servidor de backend debido al tamaño del encabezado que superen el límite permitido.
- error:
Verás el error en Response Sent to Client (Respuesta enviada al cliente). respuesta de error 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 de Analytics registrados) en el 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, haz lo siguiente:
- Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para
determina la información clave sobre
502 Bad Gateway
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
502
con el código de errorprotocol.http.TooBigHeaders
durante un período específico (si el problema ocurrió en el pasado) o si todavía hay solicitudes que fallan502
Si encuentras algún error
502
con el código X-Apigee-fault-code coincide con el valor deprotocol.http.TooBigHeaders
y, luego, determina el valor de X-Apigee-fault-source.Ejemplo 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-source:
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 de error, Fuente del error y Tamaño de la carga útil de la respuesta para el error observado cuando usas la supervisión de API, la herramienta de seguimiento o los registros de acceso de NGINX, como se explica en Pasos comunes del diagnóstico.
- Si la Fuente del error tiene el valor
target
, esto indica que La respuesta que envía el servidor de destino o backend a Apigee tiene encabezados cuyo tamaño es mayor que el límite permitido en Apigee Edge. - Puedes validar que la respuesta del destino o backend tenga encabezados cuyo tamaño se
es mayor que el límite permitido 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
. 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 que en
faultstring
tiene encabezados cuyo tamaño total supera el límite permitido.Solicitud real
Para validar con la solicitud real, haz lo siguiente:
Si tienes acceso a la solicitud real que se hizo al servidor de destino o backend, Luego, sigue estos pasos:
- Si eres un usuario de una nube pública o privada, realiza una solicitud. directamente al servidor de backend desde el propio servidor de backend o cualquier otro desde la que puedas realizar la solicitud al backend servidor.
- Si eres un usuario de la Nube privada, también puedes hacer una solicitud a en el servidor backend desde uno de los Message Processor.
- Examinar la respuesta recibida del servidor backend y, en particular, calcular y verificar el tamaño total de los encabezados pasados en la respuesta.
Si notas que el tamaño de los encabezados en la carga útil de respuesta supera el límite permitido en Apigee Edge 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
y LosTestheader2
tienen tamaños más altos, lo cual es la causa para este error, ya que excede el límite permitido en 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 respuesta 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
502
durante una acción específica Si el problema ocurrió en el pasado o si hay solicitudes Sigue fallando con502
. Puedes usar la siguiente cadena 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)
-
En cuanto el procesador de mensajes recibe la respuesta del backend o destino del servidor y descubre que el tamaño total de los encabezados es superior a 25 KB, se detiene y muestra el error:
response headers size exceeding 25,600
Esto implica que el Tamaño total del encabezado es superior a 25 KB y que Apigee arroja un error cuando el tamaño comienza a exceder el límite de 25 KB con código de falla como
protocol.http.TooBigHeaders
Solución
Corregir tamaño
Opción 1 (recomendada): Corrige la aplicación del servidor de destino para que no envíe el tamaño de los encabezados si se excede el límite de Apigee
- Analiza el motivo por el cual el servidor de destino específico envía más el tamaño del encabezado de respuesta que el límite permitido, según se define en Límites.
- Si no es la deseada, modifica tu aplicación de servidor de backend para que envíe los encabezados de respuesta cuyo tamaño sea menor que el 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 toda la información extensa que planeas enviar como parte del el encabezado en el cuerpo de la respuesta. Esto garantizará que no superes los intentos límite de encabezado.
CwC
Opción 2 : Usa la propiedad CwC para aumentar el límite de tamaño del encabezado de respuesta
Apigee proporciona un 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 superiores al límite permitido según lo documentado 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 El 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 valor máximo predeterminado límite 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, siga 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 HTTPResponse.headers.limit
tenga
con un nuevo valor en Message Processors.
- En la máquina del procesador de mensajes, busca la propiedad.
HTTPResponse.headers.limit
en la directorio/opt/apigee/edge-message-processor/conf
y verifica en ve 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 estableció con el valor25k
enhttp.properties
.Esto indica que el límite de tamaño de la carga útil de respuesta configurado en Apigee para Cloud es de 25 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 error502
- Archivo de seguimiento de las solicitudes a la API
- Resultado completo de la respuesta del servidor de destino o 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 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 error502
- Resultado completo de la respuesta del servidor de destino o 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: 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