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 502 Bad Gateway 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 502 Bad Gateway
Además, es posible que observes el siguiente mensaje de error:
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}Causas posibles
Este error se produce si el tamaño de la línea de respuesta que envía el servidor de destino o backend a Apigee Edge como parte de la respuesta HTTP es mayor que el límite máximo permitido en Apigee Edge.
Antes de analizar las posibles causas de este error, comprendamos qué significa la línea de respuesta y cómo verificar su tamaño.
Información sobre la línea de respuesta
Una respuesta HTTP típica consta de tres partes:
- Línea de estado (denominada línea de respuesta en Apigee)
- ( Conjunto de encabezados HTTP )
- [ Cuerpo ]
La línea de respuesta consta de tres partes: la versión del protocolo seguida de un código de estado numérico y su frase textual asociada , como se muestra a continuación:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Cuando la aplicación del servidor de destino o backend envía una respuesta HTTP, la primera línea que se
envía representa la línea de respuesta como se describió anteriormente. A continuación, se incluyen los
encabezados y el cuerpo o la carga útil de la respuesta.En la siguiente captura de pantalla de ejemplo, se muestra una solicitud
curl típica, la parte de solicitud y la parte de respuesta (junto con la
línea de respuesta).
Información sobre el tamaño de la línea de respuesta
En el ejemplo que se analizó anteriormente, la línea start (primera línea) de la respuesta, también denominada línea de respuesta , es la siguiente:
HTTP/1.1 200 OK
Esta línea de respuesta tiene un tamaño de
~15 bytes, ya que contiene15 ASCII characters. Como está dentro del límite permitido en Apigee Edge, Apigee Edge devuelve la respuesta al cliente sin errores.- Del mismo modo, si observas el
faultstringen el mensaje de error que se muestra arriba, contiene"response line size exceeding 2,048". Esto indica que la línea de respuesta de la respuesta HTTP que envió el servidor de destino o backend superó los 2,048 bytes.
Información sobre la línea de respuesta grande
Según la definición de la línea de estado (denominada línea de respuesta aquí) y las solicitudes y respuestas HTTP típicas, el tamaño sería mucho menor que el límite predeterminado definido de 2 K en Apigee Edge, por lo que es posible que no alcancemos el límite. Sin embargo, estos son algunos casos posibles en los que puedes superar este límite:
- El servidor de destino o backend no es un sistema HTTP. Es posible que responda con una respuesta que no sea HTTP respuesta.
- El servidor de destino o backend tiene problemas y envía una línea de respuesta larga como parte de la respuesta HTTP.
Obtén más información sobre esto en Obtener el error protocol.http.TooBigLine, "response line size exceeding 2,048.
Estas son las posibles causas del error:
| Causa | Descripción | Instrucciones de solución de problemas aplicables para |
|---|---|---|
| El tamaño de la línea de respuesta es mayor que el límite permitido | El tamaño de la línea de respuesta que envía el servidor de destino o backend como parte de la respuesta 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.
- Puedes seleccionar el filtro Proxy para reducir el código de falla.
- Traza el código de falla en función del tiempo.
Selecciona una celda que tenga el código de falla
protocol.http.TooBigLinecomo 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.TooBigLinecomo se muestra a continuación:( aumentar el tamaño de la imagen)
Haz clic en Ver registros y expande la fila de la solicitud fallida.
- En la ventana Registros, toma nota de los siguientes detalles:
- Código de estado:
502 - Fuente de falla:
target - Código de falla:
protocol.http.TooBigLine.
- Código de estado:
- Si la fuente de falla tiene el valor
targety el código de falla tiene el valorprotocol.http.TooBigLine, eso indica que la respuesta HTTP del servidor de destino o backend tiene un tamaño de línea de respuesta mayor que el límite máximo permitido en Apigee Edge.
Herramienta Trace
- Habilita la sesión de seguimiento trace session
y haz lo siguiente:
- 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 ubica dónde se produjo la falla.
Por lo general, encontrarás el error en el
flowinfoError justo después de la fase Solicitud enviada al servidor de destino, como se muestra a continuación:
Toma nota de los valores del error del seguimiento:
- error:
response line exceeding 2,048 - error.class:
com.apigee.errors.http.server.BadGateway
Esto indica que Apigee Edge (componente Message Processor) muestra el error en cuanto recibe la respuesta del servidor de backend debido a que el tamaño de la línea de respuesta supera el límite permitido.
- error:
Verás el mensaje de error enviado al cliente en la fase Respuesta enviada al cliente , como se muestra a continuación:
( aumentar el tamaño de la imagen)
- Toma nota de los valores del error del seguimiento:
- Error:
502 Bad Gateway. - Contenido del error:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Error:
También puedes navegar a la fase AX (datos de Analytics registrados) en el seguimiento y hacer clic en ella para ver los detalles del error.
( aumentar el tamaño de la imagen)
Toma nota del valor de lo siguiente:
Encabezados de la solicitud Valor X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetContenido del error : Cuerpo {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
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
502. Verifica 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 para ver si hay errores
502durante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con502. Si encuentras errores
502con el X-Apigee-fault-code que coincida con el valor deprotocol.http.TooBigLine, 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.TooBigLineX-Apigee-fault-source target
Causa: El tamaño de la línea de respuesta es mayor que el límite permitido
Diagnóstico
- Determina el código de falla y la fuente de falla del error observado con la Supervisión de API , la herramienta Trace o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si la fuente de falla tiene el valor
target, esto indica que el tamaño de la línea de respuesta que envía la aplicación del servidor de destino o backend a Apigee es mayor que el límite permitido en Apigee Edge. Puedes validar que el tamaño de la línea de respuesta superó el límite permitido de 2 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, consulta el
faultstring.Mensaje de error de ejemplo:
"faultstring":"response line size exceeding 2,048"
El
faultstringanterior indica que el tamaño de la línea de respuesta superó el límite permitido de 2 KB.Solicitud real
Para validar con la solicitud real, haz lo siguiente:
Si tienes acceso a la solicitud real realizada a la aplicación del servidor de destino o backend, realiza los siguientes pasos:
- Verifica el tamaño de la línea de respuesta.
- Si descubres que el tamaño del URI supera el
límite permitido en Apigee Edge, esa es la causa de
el problema.
Respuesta de ejemplo del servidor de destino o backend:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
En el caso anterior, la línea de respuesta
HTTP/1.1 200 1111…<trimmed>...11111111es mayor que 2 KB, es decir, contiene más de 2 K caracteres ASCII.Si usas otro cliente, puedes revisar los registros del cliente y tratar de averiguar el tamaño de la línea de respuesta que se envía a Apigee Edge.
Registros de Message Processor
Para validar con 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 la línea de respuesta superó el límite permitido en Apigee Edge.
- Determina el ID del mensaje de la solicitud fallida con la Supervisión de API, la herramienta Trace, o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
Busca el ID del mensaje en el registro de Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.logEncontrarás líneas de
system.logsimilares a las siguientes:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
El texto
message = response line size exceeding 2,048en el mensaje de error anterior indica que el tamaño de la línea de respuesta es superior a 2 KB. Por lo tanto, Apigee Edge muestra la excepción y devuelve un código de estado502con el código de fallaprotocol.http.TooBiglinea las aplicaciones cliente.
Solución
Tamaño fijo
Opción 1 [recomendada]: Corrige la aplicación del servidor de destino o backend para que no envíe líneas de respuesta de un tamaño superior al límite permitido
- Analiza el motivo por el que el cliente específico envía una línea de respuesta de un tamaño superior al límite permitido, como se define en Límites.
- Si no es deseable, modifica la aplicación del servidor de destino o backend para que envíe una línea de respuesta de un tamaño inferior al límite permitido.
- Si es deseable y quieres enviar una línea de respuesta de un tamaño superior al límite permitido, ve a las siguientes opciones.
CwC
Opción 2: Usa la propiedad CwC para aumentar el límite de la línea de respuesta
Apigee proporciona una propiedad CwC que le permite aumentar el límite de tamaño de la línea de respuesta. Para obtener más detalles, consulta Establece el límite de la línea de respuesta en Message Processor.
Límites
Apigee espera que la aplicación cliente y el servidor de backend no envíen líneas de solicitud o respuesta cuyos tamaños sean mayores que el límite permitido, como se documenta para el límite de línea 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 la línea de solicitud y respuesta se documenta para el tamaño de la línea 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 la línea de solicitud y respuesta (aunque no es una práctica recomendada). Puedes determinar el límite máximo de tamaño de la línea de respuesta 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 HTTPResponse.line.limit se
haya actualizado con un valor nuevo en Message Processors.
- En la máquina de Message Processor, busca la propiedad
HTTPResponse.line.limiten el/opt/apigee/edge-message-processor/confdirectorio y verifica qué valor se estableció, como se muestra a continuación:grep -ri "HTTPResponse.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:HTTPResponse.line.limit=2k
En el resultado de ejemplo anterior, observa que la propiedad
HTTPResponse.line.limitse estableció con el valor2kenhttp.properties.Esto indica que el límite para el tamaño de la línea de respuesta configurado en Apigee para la nube privada es de 2 KB.
Si aún necesitas asistencia de 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 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 curl completo que se usó para reproducir el error
502 - 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 fallidas
- Nombre de la organización
- Nombre del entorno
- Paquete de proxy de API
- Archivo de seguimiento de las solicitudes a la API fallidas
- Comando
curlcompleto que se usó para reproducir el error502 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 de Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log