Você está vendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. informações
Sintoma
O aplicativo cliente recebe um código de status HTTP de 502 Bad Gateway
com código de erro
messaging.adaptors.http.flow.DecompressionFailureAtResponse
como resposta a chamadas de
API.
Mensagem de erro
O aplicativo cliente recebe este código de resposta:
HTTP/1.1 502 Bad Gateway
Além disso, talvez você veja uma mensagem de erro semelhante à mostrada abaixo:
{ "fault":{ "faultstring":"Decompression failure at response", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse" } } }
Causas possíveis
Esse erro só ocorrerá se:
- A codificação especificada no cabeçalho da resposta HTTP (do servidor de back-end/destino)
Content-Encoding
é válida e aceita pelo Apigee Edge. - O formato do payload enviado pelo servidor de back-end/destino como parte da resposta HTTP
não
corresponde ao formato de codificação especificado no cabeçalho
Content-Encoding
MAS
Isso ocorre porque o Apigee Edge não consegue decodificar o payload usando a codificação especificada, porque o
formato do payload não está no mesmo formato que a codificação especificada no cabeçalho
Content-Encoding
.
Veja alguns exemplos de valores Content-Encoding
aceitos e como o Apigee Edge espera que a representação do payload seja nesses casos:
Cenário | Content-Encoding | Representação de payload |
---|---|---|
Codificação única | gzip | O formato Unix Consulte Formato RFC1952 GZIP. |
Codificação única | diminuir | Esse formato usa a estrutura |
Codificação múltipla | Codificação múltipla Por exemplo, nos casos em que a codificação é feita duas vezes, ela pode ser:
|
Codificação múltipla aplicada ao payload na ordem determinada, conforme aparece no cabeçalho. |
As possíveis causas para esse erro são as seguintes:
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
O formato do payload da resposta não corresponde ao Content-Encoding | O formato do payload de resposta enviado pelo servidor de back-end/destino não está codificado ou não corresponde à codificação especificada no cabeçalho Content-Encoding . |
Usuários de nuvens públicas e privadas de borda |
Etapas comuns do diagnóstico
Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:
Monitoramento de APIs
Para diagnosticar o erro usando o monitoramento de APIs:
- Faça login na interface do Apigee Edge como usuário com um papel apropriado.
Alterne para a organização em que você quer investigar o problema.
- Navegue até a página Analisar > Monitoramento de API > Investigar.
- Selecione o período específico em que você observou os erros.
- Verifique se o filtro Proxy está definido como Todos.
- Trace o Código de falha em relação a Time.
Selecione uma célula com o código de falha
messaging.adaptors.http.flow.DecompressionFailureAtResponse
, conforme mostrado abaixo:As informações sobre o código de falha
messaging.adaptors.http.flow.DecompressionFailureAtResponse
são mostradas conforme mostrado abaixo:Clique em Ver registros e expanda a linha que falha com o erro
502
.- Na janela Registros, observe os seguintes detalhes:
- Código de status:
502
- Origem da falha:
target
- Código de falha:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
- Código de status:
- Se a origem da falha tiver o valor
target
, isso indica que o formato do payload da resposta não corresponde à codificação compatível especificada no cabeçalho de resposta do servidor de back-endContent-Encoding
.
Ferramenta de rastreamento
Para diagnosticar o erro usando a ferramenta Trace:
- Ative a sessão de rastreamento
e:
- Aguarde a ocorrência do erro
502 Bad Gateway
ou - Se você conseguir reproduzir o problema, faça a chamada de API e reproduza
502 Bad Gateway
.
- Aguarde a ocorrência do erro
Verifique se a opção Mostrar todos os FlowInfos está ativada:
- Selecione uma das respostas com falha e examine o rastro.
- Navegue pelas diferentes fases do rastro e localize onde a falha ocorreu.
Normalmente, você encontra o erro em um fluxo logo após a fase Resposta recebida do servidor de destino, conforme mostrado abaixo:
-
Observe os valores das propriedades do trace:
- Content-Encoding:
gzip
- Corpo do conteúdo de resposta:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Content-Encoding:
Navegue para a fase de erro logo após a fase Resposta recebida do servidor de destino:
Observe as propriedades:
- erro:
Decompression failure at response
- error.class::
com.apigee.errors.http.server.BadGateway
error.cause:
Not in GZIP format
O error.cause declara que o payload da resposta não está no formato GZIP. Isso significa que o Apigee Edge esperava que o payload de resposta estivesse no formato GZIP, como especificado no cabeçalho
Content-Encoding
(determinado na etapa anterior).Portanto, o Apigee Edge não pode descompactar o payload usando gzip e retorna o erroDecompression failure at response
.
Observe que a resposta do servidor de destino/back-end é
200
neste caso. No entanto, o aplicativo cliente receberá uma resposta502
porque o erro é retornado pelo Apigee Edge.- erro:
Navegue para a fase Resposta enviada ao cliente no trace e clique nela.
Observe os seguintes detalhes do trace:
- Código de status:
502 Bad Gateway
. - Conteúdo do erro:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Código de status:
Navegue até a fase AX (Dados do Analytics registrados) no rastro e clique nela.
- Role para baixo até a seção Phase Details, Error Headers e determine os valores de X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado abaixo:
- Você verá os valores de X-Apigee-fault-code e X-Apigee-fault-source
como
messaging.adaptors.http.flow.DecompressionFailureAtResponse
etarget
, indicando que o formato do payload da resposta não corresponde à codificação especificada no cabeçalhoContent-Encoding
.Cabeçalhos de resposta Valor X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
NGINX
Para diagnosticar o erro usando os registros de acesso do NGINX:
- Se você for um usuário da nuvem privada, poderá usar os registros de acesso do NGINX para
determinar as principais informações sobre os erros HTTP
502
. Verifique os registros de acesso do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Onde:ORG, ENV e PORT# são substituídos por valores reais.
- Pesquise se há erros
502
durante um período específico (se o problema ocorreu anteriormente) ou se ainda há respostas com falha com502
. Se você encontrar erros
502
com o X-Apigee-fault-code correspondente ao valor demessaging.adaptors.http.flow.DecompressionFailureAtResponse
, determine o valor de X-Apigee-fault-source.Exemplo de erro 502 do registro de acesso do NGINX:
A entrada de amostra acima do registro de acesso do NGINX tem os seguintes valores para X-Apigee-fault-code e X-Apigee-fault-code :
Cabeçalhos de resposta Valor X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
Causa: o formato do payload da resposta não corresponde ao Content-Encoding
Por padrão, o Apigee Edge sempre descompacta o payload se o cabeçalho de resposta
Content-Encoding
contiver uma
codificação compatível. Portanto, espera-se que o formato do payload de resposta
corresponda à codificação especificada no cabeçalho de resposta Content-Encoding
.
Se houver uma incompatibilidade, você vai receber esse erro.
Diagnóstico
- Determine o código de falha e a origem da falha do erro observado usando o monitoramento da API, a ferramenta de rastreamento ou os registros de acesso do NGINX, conforme explicado nas etapas comuns de diagnóstico.
- Se o código de falha for
messaging.adaptors.http.flow.DecompressionFailureAtResponse
e a Origem de falha tiver o valortarget
, isso indica que o formato do payload de resposta enviado pelo servidor de back-end/destino não corresponde à codificação compatível especificada no cabeçalho de respostaContent-Encoding
. É possível determinar a incompatibilidade como parte da resposta HTTP usando um dos seguintes métodos:
Mensagem de erro
Para validar usando a mensagem de erro, siga estas etapas:
-
Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte
faultstring
.Exemplo de mensagem de erro:
"faultstring":"Decompression failure at response"
- Na mensagem de erro acima, ele exibe
"Decompression failure at response"
, o que significa que não foi possível descompactar a resposta usando a codificação especificada no cabeçalhoContent-Encoding
.
Trace
Para validar usando o Trace:
- Determine o Content-Type e o error.causa usando o Trace, conforme explicado em Etapas comuns de diagnóstico.
Os valores do trace de amostra são os seguintes:
- Content-Encoding:
gzip
- error.cause:
Not in GZIP format
O valor no cabeçalho de resposta Content-Encoding é gzip. No entanto, o payload da resposta não está no formato GZIP (conforme indicado por error.causa). Portanto, o Apigee Edge responde com
502 Bad Gateway
e o código de erromessaging.adaptors.http.flow.DecompressionFailureAtResponse
.- Content-Encoding:
Solicitação real
Para validar usando a solicitação real, faça o seguinte:
Se você tiver acesso à solicitação real feita ao aplicativo do servidor de destino/back-end, execute as seguintes etapas:
- Se você for um usuário da nuvem pública/privada, faça uma solicitação diretamente ao servidor de back-end a partir do próprio servidor de back-end ou de qualquer outra máquina de onde você tenha permissão para fazer a solicitação ao servidor de back-end.
- Se você for um usuário da nuvem privada, também poderá fazer a solicitação ao servidor de back-end a partir de um dos processadores de mensagens.
- Analise a resposta enviada pelo servidor de back-end e determine o valor transmitido no cabeçalho de resposta
Content-Encoding.
- Determine o formato do payload enviado como parte da solicitação.
- Se o valor do cabeçalho
Content-Encoding
estiver na lista de codificação com suporte, mas o formato do payload de resposta não corresponder à codificação especificada no cabeçalhoContent-Encoding
, essa será a causa do problema.Exemplo:
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)>A resposta de amostra acima envia o valor
gzip
para o cabeçalhoContent-Encoding
, que é uma codificação compatível no Apigee Edge. No entanto, oresponse_payload.zip
é enviado como um arquivo ZIP. Portanto, essa resposta falha com um erro502 Bad Gateway
com o código do erro:messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
Registros do processador de mensagens
Para validar usando os registros do processador de mensagens:
Se você for um usuário de nuvem privada, poderá usar os registros do processador de mensagens para determinar as principais informações sobre erros HTTP
502
.Verifique o registro do processador de mensagens:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Pesquise se há erros
502
durante um período específico (se o problema ocorreu anteriormente) ou se há respostas ainda falhando com502
. Use a seguinte string de pesquisa:grep -ri "ZipException"
Você encontrará linhas do system.log parecidas com estas:
Cenário 1
Cenário 1: quando a resposta da API tem o cabeçalho 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 formatA linha
java.util.zip.ZipException: Not in GZIP format
na mensagem de erro acima indica que o payload da resposta não é enviado no formato GZIP, emboraContent-Encoding
seja especificado como gzip. Portanto, o Apigee Edge gera a exceção e retorna um código de status502
com código de falhamessaging.adaptors.http.flow.DecompressionFailureAtResponse
para aplicativos clientes.Cenário 2
Cenário 2: quando a resposta da API tem o cabeçalho 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 checkAs linhas
java.util.zip.ZipException: incorrect header check
eCaused by: java.util.zip.DataFormatException: incorrect header check
na mensagem de erro acima indicam que o payload da resposta não é enviado no formato de desinflação e não corresponde à codificação especificada no cabeçalhoContent-Encoding
de desinflação. Portanto, o Apigee Edge gera a exceção e retorna um código de status502
com código de falhamessaging.adaptors.http.flow.DecompressionFailureAtResponse
para aplicativos clientes.
-
Resolução
- Se não houver necessidade do payload de resposta compactada no fluxo do proxy de API na Apigee Edge
e no servidor de back-end, não transmita o cabeçalho
Content-Encoding
. Se for necessário compactar o payload da resposta, vá para a etapa 2. - Se for necessário compactar o payload de resposta, verifique se o servidor de back-end
sempre envia o seguinte:
- Qualquer uma das
codificação compatíveis como o valor do cabeçalho
Content-Encoding
na resposta - O payload de resposta no formato compatível para o Apigee Edge corresponde ao formato
de codificação especificado no cabeçalho
Content-Encoding
- Qualquer uma das
codificação compatíveis como o valor do cabeçalho
- No exemplo discutido acima, o payload de resposta está no formato ZIP, mas o cabeçalho de resposta especifica
Content-Encoding: gzip
. Para corrigir o problema, envie o cabeçalho da resposta comoContent-Encoding: gzip
e o payload da resposta no 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)>
Especificação
O Apigee Edge responde com o código de status 502 Bad Gateway
com código de erro
messaging.adaptors.http.flow.DecompressionFailureAtResponse
de acordo com as seguintes especificações de
RFC:
Especificação |
---|
RFC 7231, seção 6.5.1 |
RFC 7231, seção 3.1.2.2 |
Se você ainda precisar de ajuda do suporte da Apigee, acesse É necessário coletar informações de diagnóstico.
É necessário coletar informações de diagnóstico
Reúna as seguintes informações de diagnóstico e entre em contato com o suporte do Apigee Edge:
Se você for um usuário da nuvem pública, forneça as seguintes informações:
- Nome da organização
- Nome do ambiente
- Nome do proxy de API
- Completar o comando
curl
usado para reproduzir o erro502
- Arquivo de rastreamento das respostas da API
Se você for um usuário da nuvem privada, forneça as seguintes informações:
- Mensagem de erro completa observada para as respostas com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento das respostas da API
Registros de acesso do NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Onde:ORG, ENV e PORT# são substituídos por valores reais.
- Registros do sistema do processador de mensagens
/opt/apigee/var/log/edge-message-processor/logs/system.log