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 o código de erro protocol.http.ResponseWithBody
como uma resposta para chamadas de API.
Mensagem de erro
O aplicativo cliente recebe este código de resposta:
HTTP/1.1 502 Bad Gateway
Além disso, uma das seguintes mensagens de erro pode aparecer:
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
Causas possíveis
Esse erro vai ocorrer se a resposta HTTP do servidor de back-end para o Apigee Edge for
204 No Content
ou 205 Reset Content
, mas contiver o corpo
da resposta e/ou um ou mais dos cabeçalhos a seguir:
Content-Length
Content-Encoding
Transfer-Encoding
De acordo com as especificações
RFC 7231, seção 6.3.5: 204 sem conteúdo e
RFC 7231, seção 6.3.6: Redefinir conteúdo 205, espera-se que nenhum outro conteúdo
deva ser enviado como parte do corpo do payload de resposta com o código de status 204 No
Content
ou 205 Reset Content
pelo servidor de origem. Os cabeçalhos de resposta, como Content-Length
, Content-Encoding
ou Transfer-Encoding
, indicam o tamanho, o tipo ou o formato do payload de resposta.
Portanto, o Apigee Edge retorna um código de status 502 Bad Gateway
com
o código de erro protocol.http.ResponseWithBody
para o cliente nas seguintes
circunstâncias:
Código de status do servidor de back-end | ||
---|---|---|
A resposta do servidor de back-end contém | 204 No Content | 205 Redefinir conteúdo |
Corpo da resposta | ERROR | ERROR |
Cabeçalho (definido como zero) |
ERROR | ERROR |
(definido como codificação compatível no Apigee Edge) |
ERROR | SEM ERRO |
Transfer-Encoding |
ERROR | ERROR |
Estas são as possíveis causas desse erro:
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
Corpo de resposta ou cabeçalhos com resposta 204 do servidor de back-end | O servidor de back-end envia uma resposta 204 No Content ou 205 Reset Content com um corpo de resposta e/ou um ou mais dos cabeçalhos Content-Type , Content-Encoding ou Transfer-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.
- Trace o Código de falha em relação a Time.
Selecione uma célula com o código de falha
protocol.http.ResponseWithBody
, conforme mostrado abaixo:Você verá as informações sobre o código de falha
protocol.http.ResponseWithBody
, conforme mostrado abaixo:Clique em Ver registros e expanda a linha da solicitação com falha.
- Na janela Registros, observe os seguintes detalhes:
- Código de status:
502
- Origem da falha:
target
- Código de falha:
protocol.http.ResponseWithBody
.
- Código de status:
- Se a Origem da falha tiver o valor
target
e o Código de falha tiver o valorprotocol.http.ResponseWithBody
, isso indica que o erro ocorreu porque o servidor de back-end enviou um código de status204 No Content
ou205 Reset Content
com o corpo da resposta e/ou um dos cabeçalhos mencionados na seção Possíveis causas.
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
. - Se você conseguir reproduzir o problema, faça a chamada de API e reproduza o erro
502 Bad Gateway
.
- Aguarde a ocorrência do erro
Verifique se a opção Mostrar todos os FlowInfos está ativada:
- Selecione uma das solicitações com falha e examine o rastro.
- Navegue pelas diferentes fases do rastro e localize onde a falha ocorreu.
Normalmente, você encontra o erro no Erro
flowinfo
logo após a fase Solicitação enviada para o servidor de destino, conforme mostrado abaixo:Cenário 1
Cenário 1: o servidor de back-end responde com o código de status
204 No Content
contendo o corpo da resposta e/ou um dos cabeçalhos listados em Possíveis causas.Observe os valores a seguir no rastro:
- erro:
Received 204 Response with message body
- error.class::
com.apigee.rest.framework.BadGateway
Cenário 2
Cenário 2: o servidor de back-end responde com o código de status
204 No Content
contendo o corpo da resposta e/ou um dos cabeçalhos listados em Possíveis causas.Observe os valores a seguir no rastro:
- erro:
Received 205 Response with message body
- error.class::
com.apigee.rest.framework.BadGateway
- erro:
- 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:
- Observe que os valores de X-Apigee-fault-code e X-Apigee-fault-source
are protocol.http.ResponseWithBody
etarget
, respectivamente. Isso indica que o erro ocorreu porque o servidor de back-end enviou um código de status204 No Content
ou205 Reset Content
com o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas.Erro Valor X-Apigee-fault-code protocol.http.ResponseWithBody
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 o HTTP
502 Bad Gateway
. 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á algum erro
502
com o códigoprotocol.http.ResponseWithBody
durante um período específico (se o problema tiver acontecido anteriormente) ou se ainda há alguma solicitação com falha com502
. Se você encontrar erros
502
com o X-Apigee-fault-code correspondente ao valor deprotocol.http.ResponseWithBody
, 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-source:
Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- Os valores de X-Apigee-fault-code e X-Apigee-fault-source
são
protocol.http.ResponseWithBody
etarget
, respectivamente. Isso indica que o erro ocorreu porque o servidor de back-end enviou um código de status204 No Content
ou205 Reset Content
com o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas.
Causa: corpo da resposta ou cabeçalhos com resposta 204 do servidor de back-end
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
protocol.http.ResponseWithBody
e a Origem da falha tiver o valortarget
, isso indica que o servidor de back-end respondeu com um código de status204 No Content
ou205 Reset Content
com o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas. Para validar se o servidor de back-end realmente enviou um corpo de payload de resposta e/ou um ou mais dos cabeçalhos mencionados em Possíveis causas, execute as seguintes etapas:
Se você for um usuário da nuvem pública e puder fazer a mesma solicitação de API ao servidor de back-end diretamente de qualquer um dos seus sistemas.
- Se você for um usuário da nuvem privada, poderá fazer a mesma solicitação de API ao servidor de back-end diretamente de um dos processadores de mensagens associados à organização e ao ambiente específicos em que a falha foi observada.
Revise a resposta recebida do servidor de back-end e verifique se ela contém um corpo de payload de resposta e/ou um ou mais dos cabeçalhos mencionados acima. Se estiver, esse é a causa do erro.
Amostra 1
Exemplo 1: resposta do servidor de back-end 204 com cabeçalho Content-Encoding
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveNesta amostra, o servidor de back-end respondeu com o código de status
204 No Content
eContent-Encoding: gzip
Amostra 2
Exemplo 2: resposta 204 do servidor de back-end com cabeçalho Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveNesta amostra, o servidor de back-end respondeu com o código de status
204 No Content
eContent-Length: 48
Amostra 3
Exemplo 3: resposta 205 do servidor de back-end com corpo de resposta
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
Nesta amostra, o servidor de back-end respondeu com o código de status
205 Reset Content
com o corpo da respostaThis is a sample Response.
- Em todos os exemplos acima, o servidor de back-end enviou o código de status
204 No Content
ou205 Reset Content
com o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas. - Portanto, o Apigee Edge enviou um código de status
502 Bad Gateway
com código de erroprotocol.http.ResponseWithBody
.
Resolução
Verifique se o servidor de back-end sempre atende à especificação
RFC 7231, seção 6.3.6: 205 Redefinir conteúdo ao enviar a resposta 204 No Content
ou 205 Reset Content
para o Apigee Edge. Ou seja, o servidor de back-end
NÃO PODE enviar o seguinte como parte de uma resposta 204 No Content
ou
205 Reset Content
:
- Corpo do payload de resposta
- E qualquer um destes cabeçalhos:
Content-Length
Content-Encoding
Transfer-Encoding
Especificação
O Apigee Edge responderá com o código de status 502 Bad Gateway
e o código de erro
protocol.http.ResponseWithBody
se o servidor de back-end enviar uma
resposta 204 No Content
ou 205 Reset Content
, mas
não aderir às especificações de RFC a seguir:
Especificação |
---|
RFC 7231, seção 6.3.5: 204 sem conteúdo |
RFC 7231, seção 6.3.6: 205 Redefinir conteúdo |
Pontos principais
A solução recomendada é corrigir o servidor de back-end para enviar o código de status 204 No Content
e 205 Reset Content
sem corpo de resposta e qualquer um dos
cabeçalhos - Content-Length
, Content-Encoding
e
Transfer-Encoding
e aderir às especificações
RFC 7231, seção 6.3.5: 204 sem conteúdo e
RFC 7231, seção 6.3.6: 205 Redefinir conteúdo.
Se você ainda precisar de ajuda do suporte da Apigee, acesse Precisamos 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 solicitações de API
Se você for um usuário da nuvem privada, forneça as seguintes informações:
- Concluir a mensagem de erro observada para as solicitações com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento das solicitações de 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