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 el código de error.
protocol.http.TooBigBody
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, puedes observar el siguiente mensaje de error:
{ "fault":{ "faultstring":"Body buffer overflow", "detail":{ "errorcode":"protocol.http.TooBigBody" } } }
Causas posibles
Este error ocurre si el tamaño de la carga útil que envía el servidor de destino o backend a Apigee Edge como parte de la respuesta HTTP supera el límite permitido en Apigee Edge.
Estas son las posibles causas del error:
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
El tamaño de la carga útil de la respuesta supera el límite permitido | El tamaño de la carga útil que envía el servidor de destino o backend como parte de la respuesta HTTP a Apigee se supera el límite permitido en Apigee. | Usuarios perimetrales de nubes públicas y privadas |
El tamaño de la carga útil de la respuesta supera el límite permitido descompresión | El tamaño de la carga útil que envía el servidor de destino o backend en formato comprimido como parte de HTTP supera el límite permitido cuando Apigee lo descomprime. | 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.TooBigBody
como como se muestra a continuación:Verás la información sobre el código de falla.
protocol.http.TooBigBody
, 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.TooBigBody
.
- Código de estado:
- Si la Fault Source tiene el valor
target
y el Fault Code tiene el valorprotocol.http.TooBigBody
, eso indica que la HTTP respuesta del servidor de destino/ backend tiene un tamaño de carga útil de respuesta mayor que el el límite permitido en Apigee Edge.
Trace
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita la sesión de seguimiento y realiza una de estas acciones:
- Espera a que se produzca el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza la llamada a la API y reprodúcelo.
502 Bad Gateway
error.
- 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 ocurrió la falla.
Navega a la fase Error justo después de la Respuesta recibida del destino. servidor, como se muestra a continuación:
Toma nota de los valores del error del seguimiento:
- error:
Body buffer overflow
- error.class:
com.apigee.errors.http.server.BadGateway
Esto indica que Apigee Edge (componente de procesador de mensajes) arroja el error en cuanto recibe la respuesta del servidor de backend debido a un tamaño de carga útil que supera el permiso límite.
- error:
Verás el error en la fase Respuesta enviada al cliente, 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":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
- error:
Navega a la fase Respuesta recibida del servidor de destino como se muestra a continuación para diferentes situaciones:
Sin comprimir
Situación 1: Carga útil de respuesta enviada sin comprimir
Toma nota de los valores del error del seguimiento:
- Se recibió la respuesta del servidor de destino:
200 OK
- Content-Length (de la sección Encabezados de respuesta): ~11 MB
Comprimido
Situación 2: Se envió la carga útil de la solicitud en forma comprimida
Toma nota de los valores del error del seguimiento:
- Se recibió la respuesta del servidor de destino:
200 OK
- Content-Encoding: Si ves este encabezado en los Encabezados de respuesta.
anota el valor. Por ejemplo, en este ejemplo, el valor es
gzip
- Se recibió la respuesta del servidor de destino:
Toma nota del Cuerpo de la sección Contenido de la respuesta (Response Content):
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella. para ver los detalles relacionados.
- Desplázate hacia abajo en Detalles de la fase hasta la sección Lectura de variables y determina el
valores de
target.received.content.length
, que indica lo siguiente:- El tamaño real de la carga útil de la respuesta cuando se envía en formato sin comprimir.
- El tamaño de la carga útil de la respuesta tras la descompresión por parte de Apigee, cuando la carga útil y se envían en formato comprimido. Siempre será el mismo que el valor de la política (10 MB) en este caso.
Sin comprimir
Situación 1: Carga útil de respuesta enviada sin comprimir
Ten en cuenta el valor de target.received.content.length:
Encabezados de la solicitud Valor target.received.content.length ~11 MB Comprimido
Situación 2: Se envió la carga útil de la solicitud en forma comprimida
Ten en cuenta el valor de target.received.content.length:
Encabezados de la solicitud Valor target.received.content.length ~10 MB En la siguiente tabla, se explica por qué Apigee muestra el error
502
en las dos situaciones según el valor de target.received.content.length:Situación Valor de target.received.content.length Motivo de la falla Carga útil de la respuesta en formato sin comprimir ~11 MB Tamaño > límite permitido de 10 MB Carga útil de la respuesta en formato comprimido ~10 MB Se superó el límite de tamaño tras la descompresión
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
502
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
502
durante una duración específica (si problema ocurrió en el pasado) o si todavía hay solicitudes que fallan502
- Si encuentras algún error
502
con la coincidencia X-Apigee-fault-code el valor deprotocol.http.TooBigBody
y, luego, determina el valor de la 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- error-code y X-Apigee-fault-source:
Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.TooBigBody
X-Apigee-fault-source target
Causa: El tamaño de la carga útil de la respuesta es superior al límite permitido
Diagnóstico
- Determina el Código de falla, Fuente del error y Tamaño de la carga útil de la respuesta para el error observado con 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 en la situación 1
- Si la fuente del error tiene el valor
target
, esto indica que la respuesta de carga útil que envía el servidor de destino o backend a Apigee es mayor que el límite permitido en Apigee Edge. - Verifica el tamaño de la carga útil de la respuesta como se determina en el paso 1.
- Si el tamaño de la carga útil > Límite permitido de 10 MB, esa es la causa del error.
- Si el límite permitido del tamaño de la carga útil es de ~10 MB, es posible que la respuesta la carga útil se pasan en formato comprimido. Ir a Causa: El tamaño de la carga útil de la respuesta supera el límite permitido después de la descompresión.
- Valida que el tamaño de la carga útil de la respuesta sea realmente > Límite permitido de 10 MB. Para ello, consulta el
una respuesta real mediante los siguientes pasos:
- Si no tienes acceso a la solicitud real que se hizo al servidor de destino o backend, luego ve a Resolución.
- Si tienes acceso a la solicitud real realizada al servidor de destino o backend,
sigue estos pasos:
- Si eres un usuario de nube pública o privada, envía una solicitud directamente a el servidor de backend desde el servidor de backend o cualquier otra máquina desde la que tienen permitido realizar la solicitud al servidor backend.
- Si eres un usuario de la nube privada, también puedes realizar la solicitud al de backend desde uno de los procesadores de mensajes.
- Para verificar el tamaño de la carga útil pasada en la respuesta, consulta el Encabezado Content-Length
- Si descubres que el tamaño de la carga útil es mayor que el límite permitido en Apigee Edge, esa es la causa de la problema.
Respuesta de muestra del servidor de backend:
curl -v https://BACKENDSERVER-HOSTNAME/testfile
* About to connect() to 10.14.0.10 port 9000 (#0) * Trying 10.14.0.10... * Connected to 10.14.0.10 (10.148.0.10) port 9000 (#0) > GET /testfile HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.14.0.10:9000 > Accept: */* > < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 11534336 < Content-Type: application/octet-stream < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT < Date: Wed, 30 Jun 2021 09:22:41 GMT < ----snipped---- <Response Body>
En el ejemplo anterior, puedes ver que
Content-Length: 11534336 (which is ~11 MB)
, que es la causa de este error, ya que supera el límite permitido en Apigee Edge.
Solución
Consulta la Resolución.
Causa: El tamaño de la carga útil de la respuesta supera el límite permitido después de descompresión
Si la carga útil de la respuesta se envía en formato comprimido y el encabezado de respuesta
Content-Encoding
está configurado como gzip,
Apigee descomprime la respuesta.
la carga útil útil. Durante el proceso de descompresión, si Apigee determina que el tamaño de la carga útil es mayor
que el límite permitido en Apigee Edge, luego se detendrá más
se descomprime y responde inmediatamente
con 502 Bad Gateway
y el código de error protocol.http.TooBigBody
.
Diagnóstico
- Determina el código de falla, la fuente del error y el tamaño de la carga útil de respuesta para el 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 en la situación 2
- Si la Fuente del error tiene el valor
target
, esto indica que el tamaño de la carga útil de respuesta enviada por la aplicación de destino o backend a Apigee es mayor que el límite permitido en Apigee Edge. - Verifica el tamaño de la carga útil de la respuesta como se determina en el paso 1.
- Si el tamaño de la carga útil > el límite permitido de 10 MB, esa es la causa del error.
- Si el tamaño de la carga útil es de aproximadamente 10 MB, es posible que la carga útil de respuesta sea se pasan en formato comprimido. En este caso, comprueba el tamaño descomprimido de la imagen útil de respuesta rápida.
- Puedes validar si la respuesta del destino o backend se envió en un formato comprimido y
el tamaño sin comprimir superó el límite permitido mediante una de las siguientes opciones
métodos:
Trace
Usa la herramienta Trace:
- Si has capturado un seguimiento de la solicitud errónea, consulta los pasos detallados en
Trace y
- .
- Determina el valor de target.received.content.length
- Verifica si la solicitud del cliente contenía la
Codificación de contenido:
gzip
- Si el valor de target.received.content.length es de aproximadamente los 10 MB permitidos
y el encabezado de respuesta Content-Encoding:
gzip
, entonces la causa de este error.
Solicitud real
A través de una solicitud real:
- Si no tienes acceso a la solicitud real que se hizo al servidor de destino o backend, luego ve a Resolución.
- Si tienes acceso a la solicitud real realizada al servidor de destino o backend,
realiza los siguientes pasos:
- Verifica el tamaño de la carga útil pasada en la respuesta junto con el
Encabezado
Content-Encoding
enviado en la respuesta. - Si notas que el encabezado de respuesta
Content-Encoding
está configurado comogzip
y el tamaño sin comprimir de la carga útil es mayor que el límite permitido en Apigee Edge, esa es la causa de este error.Respuesta de muestra recibida del servidor de backend:
curl -v https://BACKENDSERVER-HOSTNAME/testzippedfile.gz
* 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 /testzippedfile.gz 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-Encoding: gzip < Content-Type: application/x-gzip < Last-Modified: Wed, 30 Jun 2021 08:18:02 GMT < Testheader: test < Date: Wed, 07 Jul 2021 10:14:16 GMT < Transfer-Encoding: chunked < ----snipped---- <Response Body>
En el caso anterior, se envía el encabezado
Content-Encoding: gzip
. el tamaño del archivotestzippedfile.gz
en la respuesta es menor que el límite; sin embargo, el tamaño del archivo descomprimidotestzippedfile
no ~15 MB.
- Verifica el tamaño de la carga útil pasada en la respuesta junto con el
Encabezado
Registros del procesador de mensajes
Usa los registros de Message Processor:
- Si eres un usuario de la nube privada, puedes usar los registros del procesador de mensajes para lo siguiente:
Determinar la información clave sobre los errores
502
de HTTP. 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 duración específica (si el problema ocurrió en el pasado) o si todavía hay solicitudes que fallan502
Puedes usar las siguientes cadenas de búsqueda:grep -ri "chunkCount"
grep -ri "BadGateway: Body buffer overflow"
- Encontrarás líneas de
system.log
similares a las que se muestran a continuación (TotalRead
ychunkCount
pueden variar en tu caso):2021-07-07 09:40:47,012 NIOThread@7 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2571 2021-07-07 09:40:47,012 NIOThread@7 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:10.148.0.10:9000 Local:10.148.0.9:42240]@9155 useCount=1 bytesRead=0 bytesWritten=182 age=23ms lastIO=0ms isOpen=true).onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: Body buffer overflow 2021-07-07 09:40:47,012 NIOThread@7 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@77cbd7c4, Body buffer overflow)
Durante el proceso de descompresión, tan pronto como el Message Processor determina la el total de bytes leídos es mayor que 10 MB, se detiene e imprime la siguiente línea:
Message is too large. TotalRead 10489856 chunkCount 2571
Esto implica que el Tamaño de la carga útil de la respuesta es superior a 10 MB y que Apigee arroja un error cuando el tamaño comienza a exceder el límite de 10 MB con el código de falla como
protocol.http.TooBigBody
- Si has capturado un seguimiento de la solicitud errónea, consulta los pasos detallados en
Trace y
Solución
Corregir tamaño
Opción 1 (recomendada): Corrige la aplicación del servidor de destino para que no envíe un tamaño de carga útil que exceda el límite de Apigee
- Analiza el motivo por el cual el servidor de destino específico envía el tamaño de la respuesta o carga útil. supera el límite permitido según se define en Límites.
- Si no es deseable, modifica la aplicación del servidor de destino para que envíe de respuesta o carga útil sea inferior al límite permitido.
- Si es conveniente y quieres enviar una respuesta o carga útil que supere la cantidad permitida límite, ve a las siguientes opciones.
Patrón de URL firmada
Opción 2 [recomendada]: Usa el patrón de URLs firmadas en un JavaAviso de Apigee
Para cargas útiles de más de 10 MB, Apigee recomienda usar un patrón de URL firmadas dentro de Apigee JavaLlamadas, ilustradas por el Leyenda perimetral: Generador de URL firmadas en GitHub.
Transmisión
Opción 3: Usa la transmisión
Si tu proxy de API necesita manejar solicitudes o respuestas muy grandes, puedes habilitar la transmisión en Apigee
CwC
Opción 4: Usa la propiedad CwC para aumentar el límite de búfer
Esta opción debe usarse solo cuando no puedas usar ninguna de las opciones recomendadas, como puede haber problemas de rendimiento si se aumenta el tamaño predeterminado.
Apigee proporciona un CwC que le permite aumentar el tamaño de la carga útil de la solicitud y la respuesta límite. Para obtener más información, consulta Establece el límite de tamaño del mensaje en el router o el procesador de mensajes.
Límites
Apigee espera que la aplicación cliente y el servidor de backend no envíen tamaños de cargas útiles superiores a
el límite permitido según se documenta para
Request/response size
en
Límites de Apigee Edge.
- Si eres un usuario de la nube pública, el límite máximo para la solicitud y la respuesta
el tamaño de la carga útil es el que se documenta para
Request/response size
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 carga útil de las solicitudes y respuestas (aunque no es una práctica recomendada). Para determinar el límite máximo del tamaño de la carga útil de la 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
Se actualizó HTTPResponse.body.buffer.limit
con un nuevo valor en el campo Mensaje
Procesadores.
En la máquina del procesador de mensajes, busca la propiedad.
HTTPResponse.body.buffer.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.body.buffer.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.body.buffer.limit=10m
En el resultado de ejemplo anterior, observa que la propiedad Se estableció
HTTPResponse.body.buffer.limit
con el valor10m
enhttp.properties
Esto indica que el límite del tamaño de la carga útil de la solicitud configurado en Apigee para La nube privada es de 10 MB.
Si aún necesitas asistencia 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 error
502
- 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 la carga útil
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 error
502
- Resultado completo de la respuesta del servidor de destino o backend junto con el tamaño de la carga útil
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