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 502 Bad Gateway com o erro
    código protocol.http.ResponseWithBody como resposta para chamadas de API.
  
Mensagem de erro
O aplicativo cliente recebe o seguinte código de resposta:
HTTP/1.1 502 Bad Gateway
Além disso, você poderá encontrar uma das seguintes mensagens de erro:
{
   "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 ocorrerá se a resposta HTTP do servidor de back-end para o Apigee Edge for
    204 No Content ou 205 Reset Content, mas contém a resposta
    body e/ou um ou mais dos seguintes cabeçalhos:
  
- Content-Length
- Content-Encoding
- Transfer-Encoding
    De acordo com as especificações
    
      RFC 7231, seção 6.3.5: 204 No Content e
    
      RFC 7231, seção 6.3.6: 205 Redefinir conteúdo, espera-se que nenhum conteúdo adicional
      precisa ser enviado como parte do corpo do payload da 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 no seguinte
    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 | ERRO | ERRO | 
| Cabeçalho  (definido como diferente de zero) | ERRO | ERRO | 
| 
 (definido como codificação compatível no Apigee Edge) | ERRO | SEM ERROS | 
| Transfer-Encoding | ERRO | ERRO | 
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 um 204 No Contentou um205 Reset Contentcom um corpo de resposta e/ou um ou mais cabeçalhosContent-Type,Content-EncodingouTransfer-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.
- Compare Código de falha com Time.
- Selecione uma célula que tenha o código de falha - protocol.http.ResponseWithBodycomo mostrados abaixo:  
- As informações sobre o código de falha serão exibidas - 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 da falha:protocol.http.ResponseWithBody.
 
- Código de status: 
- Se Origem da falha tiver o valor targete o valor Code tem o valorprotocol.http.ResponseWithBody, então esse indica que o erro ocorreu porque o servidor de back-end enviou uma Código de status204 No Contentou205 Reset Contentcom do corpo da resposta e/ou um dos cabeçalhos mencionados no Seção Possíveis causas.
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 for possível reproduzir o problema, faça a chamada de API e reproduza o erro 502 Bad Gateway.
 
- Aguarde a ocorrência do erro 
- Verifique se Mostrar todos os FlowInfos está ativado:   
- Selecione uma das solicitações com falha e examine o trace.
- Navegar pelas diferentes fases do trace e localizar a falha o incidente.
- O erro normalmente é encontrado no Erro - flowinfoapenas após a fase Solicitação enviada ao 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 Contentcontendo o corpo da resposta e/ou um dos cabeçalhos listados em Possíveis causas.  - Observe os seguintes valores do trace: - 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 Contentcontendo o corpo da resposta e/ou um dos cabeçalhos listados em Possíveis causas.  - Observe os seguintes valores do trace: - erro:  Received 205 Response with message body
- error.class::com.apigee.rest.framework.BadGateway
 
- erro:  
- 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:   
- Observe que os valores de X-Apigee-fault-code e X-Apigee-fault-source
              are protocol.http.ResponseWithBodyetarget, respectivamente. Isso indica que o erro ocorreu porque o servidor de back-end enviou uma Código de status204 No Contentou205 Reset Contentcom o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas.Erro Valor X-Apigee-fault-code protocol.http.ResponseWithBodyX-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 o 502 Bad Gatewaydo HTTP.
- 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 502com o código de erro.protocol.http.ResponseWithBodydurante um período específico (se o problema tiver acontecido no passado) ou se houver alguma solicitação que ainda esteja falhando com502:
- Se você encontrar erros - 502no X-Apigee-fault-code correspondente ao valor de- protocol.http.ResponseWithBody, em seguida, 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-source: - Cabeçalhos de resposta - Valor - X-Apigee-fault-code - protocol.http.ResponseWithBody- X-Apigee-fault-source - target
- Observe que os valores de X-Apigee-fault-code e X-Apigee-fault-source
              são protocol.http.ResponseWithBodyetarget, respectivamente. Isso indica que o erro ocorreu porque o servidor de back-end enviou uma Código de status204 No Contentou205 Reset Contentcom o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas.
Causa: corpo da resposta ou cabeçalhos com a resposta 204 do servidor de back-end
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 protocol.http.ResponseWithBodye A Origem da falha tem o valortarget, o que indica que o back-end servidor respondeu com um status204 No Contentou205 Reset Contentcom o corpo da resposta e/ou um dos cabeçalhos mencionados Possíveis causas.
- Para validar se o servidor de back-end realmente enviou um corpo de carga útil de resposta e/ou um ou mais cabeçalhos mencionados em Possíveis causas, siga estas etapas: - Se você for um usuário de nuvem pública e puder fazer a mesma solicitação de API para o servidor de back-end diretamente de qualquer um dos seus sistemas. 
- Se você é um usuário da nuvem privada, pode fazer a mesma solicitação de API para o servidor de back-end diretamente de um dos processadores de mensagens associados à da organização e do ambiente em que a falha é observada.
- Revise a resposta recebida do servidor de back-end e verifique se ela contém um corpo da carga da resposta e/ou um ou mais dos cabeçalhos mencionados acima. Se sim, isso é a causa desse erro. - Amostra 1- Exemplo 1: resposta 204 do servidor de back-end 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-alive- Neste exemplo, o servidor de back-end respondeu com Código de status - 204 No Contente- Content-Encoding: gzip- Amostra 2- Exemplo 2: Resposta 204 do servidor de back-end com cabeçalho de tamanho de conteúdo - 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-alive- Neste exemplo, o servidor de back-end respondeu com Código de status - 204 No Contente- Content-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- Neste exemplo, o servidor de back-end respondeu com Código de status - 205 Reset Contentcom corpo da resposta- This is a sample Response.
- Em todos os exemplos acima, o servidor de back-end enviou 204 No Contentou Código de status205 Reset Contentcom o corpo da resposta e/ou um dos cabeçalhos mencionados em Possíveis causas.
- Portanto, a Apigee Edge enviou o código de status 502 Bad Gatewaycom o código de erroprotocol.http.ResponseWithBody.
 
Resolução
Verifique se o servidor de back-end sempre segue a especificação
     
       RFC 7231, seção 6.3.6: 205 Redefinir conteúdo, ao enviar o 204 No Content
    ou 205 Reset Content para a Apigee Edge. Ou seja, o servidor de back-end
    NÃO É POSSÍVEL enviar o seguinte como parte de um 204 No Content ou
    Resposta do 205 Reset Content:
- Corpo do payload da resposta
- E qualquer um dos seguintes cabeçalhos:
       - Content-Length
- Content-Encoding
- Transfer-Encoding
 
Especificação
O Apigee Edge responde 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 um
    204 No Content ou 205 Reset Content, mas
    não está em conformidade com as seguintes especificações de RFC:
  
| Especificação | 
|---|
| RFC 7231, seção 6.3.5: 204 No Content | 
| RFC 7231, seção 6.3.6: 205 Redefinir conteúdo | 
Pontos principais a observar
A solução recomendada é corrigir o servidor de back-end para enviar o 204 No Content
    e o código de status 205 Reset Content sem corpo de resposta e qualquer um dos
    cabeçalhos Content-Length, Content-Encoding e
    Transfer-Encoding e atendem às especificações
    
      RFC 7231, seção 6.3.5: 204 No Content e
    
      RFC 7231, seção 6.3.6: 205 Redefinir conteúdo.
  
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 solicitações de API
Se você for um usuário da nuvem privada, forneça estas informações:
- Mensagem de erro completa observada para as solicitações com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento para as 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