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 messaging.adaptors.http.flow.DecompressionFailureAtResponse
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 un mensaje de error similar al que se muestra a continuación:
{ "fault":{ "faultstring":"Decompression failure at response", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse" } } }
Causas posibles
Este error ocurre solo si se cumplen estas condiciones:
- La codificación especificada en el encabezado de la respuesta HTTP (del servidor de backend o de destino)
Content-Encoding
es válida y es compatible con Apigee Edge. - El formato de carga útil que envía el servidor de backend o de destino como parte de la respuesta HTTP no coincide con el formato de codificación especificado en el encabezado
Content-Encoding
.
PERO
Esto se debe a que Apigee Edge no puede decodificar la carga útil mediante la codificación especificada, ya que el formato de la carga útil no tiene el mismo formato que la codificación especificada en el encabezado Content-Encoding
.
Estos son algunos ejemplos de valores Content-Encoding
compatibles y cómo Apigee Edge espera que sea la representación de la carga útil en esos casos:
Situación | Content-Encoding | Representación de la carga útil |
---|---|---|
Codificación única | gzip | El formato Consulta el formato GZIP RFC1952. |
Codificación única | reducir deflación | Este formato usa la estructura |
Codificación múltiple | Codificación múltiple Por ejemplo, en los casos en que la codificación se realiza dos veces, puede ser:
|
Codificación múltiple aplicada a la carga útil en el orden determinado como aparece en el encabezado. |
Las posibles causas de este error son las siguientes:
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
El formato de la carga útil de la respuesta no coincide con la codificación del contenido | El formato de la carga útil de respuesta que envió el servidor de backend o de destino no está codificado o no coincide con la codificación especificada en el encabezado Content-Encoding . |
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.
- Asegúrate de que el filtro Proxy esté configurado en Todos.
- Traza el código de falla en función del valor Time.
Selecciona una celda que tenga el código de falla
messaging.adaptors.http.flow.DecompressionFailureAtResponse
, como se muestra a continuación:Se muestra información sobre el código de falla
messaging.adaptors.http.flow.DecompressionFailureAtResponse
como se muestra a continuación:Haz clic en Ver registros y expande la fila que falla con el error
502
.- En la ventana Registros, ten en cuenta los siguientes detalles:
- Código de estado:
502
- Fuente de la falla:
target
- Código de fallas:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
- Código de estado:
- Si Fuente de errores tiene el valor
target
, eso indica que el formato de la carga útil de respuesta no coincidió con la codificación compatible especificada en el encabezado de respuestaContent-Encoding
del servidor de backend.
Herramienta de seguimiento
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 ocurra el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza la llamada a la API y reproduce
502 Bad Gateway
.
- Espera a que ocurra el error
Asegúrate de que la opción Show all FlowInfos esté habilitada:
- Selecciona una de las respuestas con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
Por lo general, encontrarás el error en un flujo justo después de la fase Respuesta recibida del servidor de destino, como se muestra a continuación:
-
Observa los valores de las propiedades del seguimiento:
- Codificación del contenido:
gzip
- Cuerpo del contenido de la respuesta:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Codificación del contenido:
Navega a la fase de error justo después de la fase Respuesta recibida del servidor de destino:
Observa las propiedades:
- error:
Decompression failure at response
- error.class:
com.apigee.errors.http.server.BadGateway
. error.cause:
Not in GZIP format
El campo error.cause indica que la carga útil de la respuesta no está en formato GZIP. Esto significa que Apigee Edge esperaba que la carga útil de respuesta estuviera en formato GZIP como se especificó en el encabezado
Content-Encoding
(determinado en el paso anterior).Por lo tanto, Apigee Edge no puede descomprimir la carga útil con gzip y muestra el errorDecompression failure at response
.
Ten en cuenta que, en este caso, la respuesta del servidor de destino o backend es
200
. Sin embargo, la aplicación cliente recibirá una respuesta502
, ya que Apigee Edge muestra el error.- error:
Navega a la fase Respuesta enviada al cliente en el registro y haz clic en ella.
Observa los siguientes detalles del seguimiento:
- Código de estado:
502 Bad Gateway
. - Contenido del error:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Código de estado:
Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
- Desplázate hacia abajo hasta la sección Detalles de la fase, Encabezados de error y determina los valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:
- Verás los valores de X-Apigee-fault-code y X-Apigee-fault-source como
messaging.adaptors.http.flow.DecompressionFailureAtResponse
ytarget
, lo que indica que el formato de la carga útil de respuesta no coincidió con la codificación especificada en el encabezadoContent-Encoding
.Encabezados de respuesta Valor X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
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 los errores HTTP
502
. 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.
- 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 respuestas que aún fallan con502
. Si encuentras algún error
502
con el código X-Apigee-fault-code que coincide con el valor demessaging.adaptors.http.flow.DecompressionFailureAtResponse
, 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-code
Encabezados de respuesta Valor X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
Causa: El formato de la carga útil de la respuesta no coincide con la codificación del contenido.
De forma predeterminada, Apigee Edge siempre descomprime la carga útil si el encabezado de respuesta Content-Encoding
contiene una
codificación válida y compatible. Por lo tanto, se espera que el formato de la carga útil de respuesta coincida con la codificación especificada en el encabezado de respuesta Content-Encoding
.
Si hay una discrepancia, aparecerá este error.
Diagnóstico
- Determina el código con fallas y la fuente de errores del error observado con la supervisión de la API, la herramienta de Trace o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si el código de error es
messaging.adaptors.http.flow.DecompressionFailureAtResponse
y la fuente de errores tiene el valortarget
, esto indica que el formato de la carga útil de respuesta que envió el servidor de backend o de destino no coincide con la codificación compatible especificada en el encabezado de respuestaContent-Encoding
. Puedes determinar la falta de coincidencia como parte de la respuesta HTTP 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
.Ejemplo de mensaje de error:
"faultstring":"Decompression failure at response"
- En el mensaje de error anterior, muestra
"Decompression failure at response"
, lo que significa que la respuesta no se pudo descomprimir con la codificación especificada en el encabezadoContent-Encoding
.
Trace
Para validar el uso de Trace, sigue estos pasos:
- Determina el Content-Type y la error.Cause con Trace, como se explica en Pasos comunes para el diagnóstico.
Los valores del seguimiento de muestra son los siguientes:
- Codificación del contenido:
gzip
- error.cause:
Not in GZIP format
El valor en el encabezado de respuesta Content-Encoding es gzip; sin embargo, la carga útil de respuesta no está en formato GZIP (como lo indica error.Cause). Por lo tanto, Apigee Edge responde con
502 Bad Gateway
y el código de errormessaging.adaptors.http.flow.DecompressionFailureAtResponse
.- Codificación del contenido:
Solicitud real
Para validar el uso de la solicitud real, sigue estos pasos:
Si tienes acceso a la solicitud real realizada a la aplicación del 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 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 que envió el servidor de backend y determina el valor que se pasó en el encabezado de respuesta
Content-Encoding.
- Determina el formato de la carga útil enviada como parte de la solicitud.
- Si el valor del encabezado
Content-Encoding
está en la lista de la codificación compatible, pero el formato de la carga útil de respuesta no coincide con la codificación especificada en el encabezadoContent-Encoding
, esa es la causa del problema.Ejemplo:
curl -v https://HOSTALIAS/test
***trimmed*** > < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.zip Response Body(not in GZIP format)>La respuesta de ejemplo anterior envía el valor
gzip
al encabezadoContent-Encoding
, que es una codificación compatible en Apigee Edge. Sin embargo, elresponse_payload.zip
se envía como un archivo ZIP. Por lo tanto, esta respuesta falla con un error502 Bad Gateway
con el código de errormessaging.adaptors.http.flow.DecompressionFailureAtResponse
.
Registros de Message Processor
Para validar el uso de los registros de Message Processor, haz lo siguiente:
Si eres un usuario de la nube privada, puedes usar los registros de Message Processor para determinar la información clave de los errores HTTP
502
.Verifica el registro 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 respuestas que aún fallan con502
. Puedes usar la siguiente cadena de búsqueda:grep -ri "ZipException"
Encontrarás líneas de system.log similares a las siguientes:
Situación 1
Situación 1: Cuando la respuesta de la API tiene el encabezado Content-Encoding: gzip
2021-08-02 06:50:25,433 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0 bytesWritten=203 age=469ms lastIO=0ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: Not in GZIP format
---trimmed-- 2021-08-02 06:50:25,433 NIOThread@2 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:50:25,434 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format) 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exceptionjava.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP formatLa línea
java.util.zip.ZipException: Not in GZIP format
del mensaje de error anterior indica que la carga útil de la respuesta no se envía en formato GZIP, aunqueContent-Encoding
se especifica como gzip. Por lo tanto, Apigee Edge genera la excepción y muestra un código de estado502
con el código de fallamessaging.adaptors.http.flow.DecompressionFailureAtResponse
a las aplicaciones cliente.Situación 2
Situación 2: Cuando la respuesta de la API tiene el encabezado Content-Encoding: deflate
2021-08-02 06:35:21,215 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0 bytesWritten=202 age=439ms lastIO=2ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
---trimmed---- Caused by:java.util.zip.DataFormatException: incorrect header check
---trimmed--- 2021-08-02 06:35:21,215 NIOThread@0 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:35:21,216 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277, incorrect header check) 2021-08-02 06:35:21,216 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.util.zip.ZipException: incorrect header check occurred while writing to channel null 2021-08-02 06:35:21,217 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: incorrect header checkLas líneas
java.util.zip.ZipException: incorrect header check
yCaused by: java.util.zip.DataFormatException: incorrect header check
del mensaje de error anterior indican que la carga útil de la respuesta no se envía en formato deflate ni coincide con la codificación especificada en el encabezadoContent-Encoding
de deflate. Por lo tanto, Apigee Edge genera la excepción y muestra un código de estado502
con el código de fallamessaging.adaptors.http.flow.DecompressionFailureAtResponse
a las aplicaciones cliente.
-
Resolución
- Si no hay necesidad de la carga útil de respuesta comprimida en el flujo del proxy de la API en Apigee Edge y en el servidor de backend, no pases el encabezado
Content-Encoding
. Si es necesario comprimir la carga útil de la respuesta, ve al paso 2. - Si es necesario comprimir la carga útil de la respuesta, asegúrate de que el servidor de backend siempre envíe lo siguiente:
- Cualquiera de la
codificación compatible como valor del encabezado
Content-Encoding
en la respuesta - La carga útil de respuesta en el formato compatible con Apigee Edge coincide con el
formato de codificación especificado en el encabezado
Content-Encoding
.
- Cualquiera de la
codificación compatible como valor del encabezado
- En el ejemplo anterior, la carga útil de la respuesta está en formato ZIP, pero el encabezado de respuesta especifica
Content-Encoding: gzip
. Para solucionar el problema, envía el encabezado de respuesta comoContent-Encoding: gzip
y la carga útil de respuesta en formatogzip
:curl -v https://HOSTALIAS/v1/test
> < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.gz Response Body(in GZIP format)>
Especificación
Apigee Edge responde con el código de estado 502 Bad Gateway
con el código de error messaging.adaptors.http.flow.DecompressionFailureAtResponse
según las siguientes especificaciones de RFC:
Especificación |
---|
RFC 7231, sección 6.5.1 |
RFC 7231, sección 3.1.2.2 |
Si aún necesitas asistencia de la asistencia de Apigee, ve a 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 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 de las respuestas de la API
Si eres un usuario de la nube privada, proporciona la siguiente información:
- Mensaje de error completo observado para las respuestas con errores
- Nombre del entorno
- Paquete de proxy de API
- Archivo de seguimiento de las respuestas de la API
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