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.DecompressionFailureAtResponsecomo 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 Gatewayou - 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 formatO 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 é
200nesta case; No entanto, o aplicativo cliente receberá uma solicitação502resposta, 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.DecompressionFailureAtResponseetarget, 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.DecompressionFailureAtResponseX-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_logOnde:ORG, ENV e PORT# são substituídos por valores reais.
- Pesquise se há erros
502durante um período específico (se o problema aconteceu no passado) ou se alguma resposta ainda falha com502: Se você encontrar erros
502no 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.DecompressionFailureAtResponseX-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.DecompressionFailureAtResponsee 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 Gatewaye 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-Encodingestiver 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
gzippara 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 Gatewaycom 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.logPesquise se há algum erro
502durante 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 formatoccurred 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 formatna 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 status502com código de falhamessaging.adaptors.http.flow.DecompressionFailureAtResponseaos 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 checkeCaused by: java.util.zip.DataFormatException: incorrect header checkna 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-Encodingdo deflate. Portanto, o Apigee Edge gera a exceção e retorna um código de status502com código de falhamessaging.adaptors.http.flow.DecompressionFailureAtResponseaos 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-Encodingna 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: gzipe o payload de resposta emgzipformato: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
curlcompleto 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_logOnde: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