Esta é a documentação do Apigee Edge.
Acesse
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 uma resposta à API
chamadas.
Mensagem de erro
O aplicativo cliente recebe o seguinte código de resposta:
HTTP/1.1 502 Bad Gateway
Além disso, uma mensagem de erro semelhante a esta pode aparecer:
{ "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 de resposta HTTP (do servidor de back-end/destino)
Content-Encoding
é válido e com suporte do Apigee Edge, - O formato de payload enviado pelo servidor de back-end/destino como parte da resposta HTTP
não
corresponder ao formato de codificação especificado no cabeçalho
Content-Encoding
MAS
Isso ocorre porque o Apigee Edge não decodifica o payload usando a codificação especificada, já que o
do payload não está no mesmo formato da codificação especificada no
Cabeçalho Content-Encoding
.
Estes são alguns exemplos de valores Content-Encoding
compatíveis e como a Apigee Edge
espera que a representação do payload seja nos casos:
Cenário | Content-Encoding | Representação de payload |
---|---|---|
Codificação única | gzip | O formato Unix Consulte Formato GZIP RFC1952. |
Codificação única | deflar | 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, pode ser:
|
Várias codificação são aplicadas ao payload na ordem determinada, conforme aparece no cabeçalho. |
Estas são as possíveis causas desse erro:
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 da resposta enviado pelo servidor de back-end/destino é
não codificado ou não
correspondam à codificação especificada no cabeçalho Content-Encoding . |
Usuários de nuvem pública e privada 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 a API Monitoring:
- Faça login na interface do Apigee Edge como usuário com um para o papel apropriado.
Alterne para a organização na qual você deseja investigar o problema.
- Navegue até o menu Analisar > Monitoramento de APIs > Investigar.
- Selecione o período específico em que você observou os erros.
- Verifique se o filtro Proxy está definido como Todos.
- Compare Código de falha com Time.
Selecione uma célula que tenha o código de falha
messaging.adaptors.http.flow.DecompressionFailureAtResponse
como mostrados abaixo:Informações sobre o código de falha
messaging.adaptors.http.flow.DecompressionFailureAtResponse
é exibido conforme mostrado abaixo:Clique em Ver registros e expanda a linha que apresenta falha com o erro
502
.- Na janela Registros, observe os seguintes detalhes:
- Código de status:
502
- Origem da falha:
target
- Código da 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 correspondeu codificação compatível especificada no cabeçalho de resposta do servidor de back-endContent-Encoding
.
Ferramenta Trace
Para diagnosticar o erro usando a ferramenta Trace:
- Ative a sessão de trace.
e:
- Aguarde a ocorrência do erro
502 Bad Gateway
ou - Se você puder reproduzir o problema, faça a chamada de API e reproduza-o
502 Bad Gateway
:
- Aguarde a ocorrência do erro
Verifique se Mostrar todos os FlowInfos está ativado:
- Selecione uma das respostas com falha e examine o trace.
- Navegar pelas diferentes fases do trace e localizar a falha o incidente.
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:
- Codificação de conteúdo:
gzip
- Corpo do conteúdo da resposta:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Codificação de conteúdo:
Navegue para a fase de erro logo após a mensagem Response Received from target server fase:
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 afirma 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, foi especificado no cabeçalho
Content-Encoding
(determinado no cabeçalho etapa).Por isso, o Apigee Edge não consegue descompactar o payload usando o gzip e retorna erroDecompression failure at response
.
Observe que a resposta do servidor de destino/back-end é
200
nesta case; No entanto, o aplicativo cliente receberá uma solicitação502
resposta, já que o erro é retornado pelo Apigee Edge.- erro:
Navegue até a fase Response Sent to Client no trace e clique nele.
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 (Analytics Data Recorded) no trace e clicar nele.
- Role para baixo até a seção Phase Details, Error Headers e
determinar os valores de X-Apigee-fault-code e X-Apigee-fault-source
conforme mostrado abaixo:
- Você vai encontrar 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 correspondeu ao 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 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 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 aconteceu no passado) ou se alguma resposta ainda falha com502
: Se você encontrar erros
502
no X-Apigee-fault-code correspondendo ao valor demessaging.adaptors.http.flow.DecompressionFailureAtResponse
, Depois, determine o valor de X-Apigee-fault-source.Exemplo de erro 502 do registro de acesso do NGINX:
O exemplo de entrada do registro de acesso do NGINX acima 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
contém um(a)
com suporte. Portanto, o formato do payload da resposta
precisa corresponder à codificação especificada no cabeçalho de resposta Content-Encoding
.
Se houver incompatibilidade, você receberá esse erro.
Diagnóstico
- Determine o código da falha e a fonte da falha do erro observado usando a API do Monitoring, da ferramenta Trace ou de acesso do NGINX, conforme explicado em Etapas comuns de diagnóstico.
- Se o Código da falha for
messaging.adaptors.http.flow.DecompressionFailureAtResponse
e o A Origem da falha tem o valortarget
, então este indica que o formato do payload de resposta enviado pelo servidor de back-end/destino não corresponde ao codificação compatível especificada no cabeçalho de respostaContent-Encoding
. É possível determinar a incompatibilidade como parte da resposta HTTP usando uma das opções a seguir métodos:
Mensagem de erro
Para validar usando a mensagem de erro:
-
Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte o
faultstring
.Exemplo de mensagem de erro:
"faultstring":"Decompression failure at response"
- A mensagem de erro acima mostra
"Decompression failure at response"
, que implica que a resposta não pôde ser descompactado usando a codificação especificada noContent-Encoding
.
Trace
Para validar usando o Trace:
- Determine os valores de Content-Type e error.Cause de ida. usando o Trace conforme explicado nas Etapas comuns de diagnóstico.
Os valores do trace de amostra são os seguintes:
- Codificação de conteúdo:
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.cause ). Portanto, o Apigee Edge responde com
502 Bad Gateway
e código do erromessaging.adaptors.http.flow.DecompressionFailureAtResponse
.- Codificação de conteúdo:
Solicitação real
Para validar usando a solicitação real:
Se você tem acesso à solicitação real feita ao servidor de destino/back-end e execute as seguintes etapas:
- Se você for um usuário da nuvem pública/privada, faça uma solicitação. diretamente do próprio servidor de back-end ou de qualquer outro máquina de onde você pode fazer a solicitação ao servidor de back-end.
- Se você for usuário da nuvem privada, também poderá fazer a solicitação ao servidor de back-end por um dos processadores de mensagens.
- Analise a resposta enviada pelo servidor de back-end e determine o valor
transmitidos 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 com suporte à codificação, mas o formato do payload da resposta não correspondem à 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)>O exemplo de resposta acima envia o valor
gzip
para o cabeçalhoContent-Encoding
, que é um codificação compatível no Apigee Edge. No entanto,response_payload.zip
é enviado como um arquivo ZIP. Portanto, esta a resposta falha com um erro502 Bad Gateway
com o código de erro:messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
Registros do processador de mensagens
Para validar usando registros do processador de mensagens:
Se você for um usuário da 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á algum erro
502
durante uma duração (se o problema aconteceu no passado) ou se há alguma resposta ainda falha com502
. Você pode usar a seguinte string de pesquisa:grep -ri "ZipException"
Você encontrará linhas de system.log semelhantes às seguintes:
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 a resposta não é enviado no formato GZIP, embora o parâmetroContent-Encoding
é 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
aos 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 a carga útil da resposta não foi enviada deflar e não corresponder à codificação especificada no CabeçalhoContent-Encoding
do deflate. Portanto, o Apigee Edge gera a exceção e retorna um código de status502
com código de falhamessaging.adaptors.http.flow.DecompressionFailureAtResponse
aos aplicativos clientes.
-
Resolução
- Se não for necessário o payload de resposta compactado no fluxo do proxy de API no 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, garanta que o servidor de back-end
sempre envia o seguinte:
- Qualquer um dos
com suporte como o valor do cabeçalho
Content-Encoding
na resposta - O payload de resposta para o Apigee Edge no formato compatível corresponde à codificação
formato especificado no cabeçalho
Content-Encoding
.
- Qualquer um dos
com suporte 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 a resposta cabeçalho comoContent-Encoding: gzip
e o payload de resposta emgzip
formato: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 o código de erro
messaging.adaptors.http.flow.DecompressionFailureAtResponse
conforme o seguinte RFC
especificações:
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
Colete as informações de diagnóstico a seguir 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 da API
- Comando
curl
completo usado para reproduzir o erro502
- Arquivo de rastreamento para as respostas da API
Se você for um usuário da nuvem privada, forneça estas informações:
- Mensagem de erro completa observada para as respostas com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento para as 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