Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. info
Sintoma
O aplicativo cliente recebe um código de status HTTP 502 Bad Gateway com o código de erro protocol.http.Response405WithoutAllowHeader 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ê pode observar a seguinte mensagem de erro:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}Causas possíveis
Esse erro ocorre se o servidor de back-end responder com 405 Method Not Allowed status
código sem o Allow cabeçalho.
De acordo com a especificação
RFC 7231, seção 6.5.5: 405 Método não permitido, espera-se que o servidor de origem
DEVA gerar e enviar um campo de cabeçalho Allow em uma resposta 405 contendo uma
lista dos métodos atualmente compatíveis do recurso de destino. Caso contrário, a Apigee responde com
502 Bad Gateway e o código de erro protocol.http.Response405WithoutAllowHeader.
| Causa | Descrição | Instruções de solução de problemas aplicáveis para |
|---|---|---|
| Resposta 405 sem cabeçalho "Allow" do servidor de back-end | O servidor de back-end que está processando a solicitação de API responde com o código de status 405 sem o cabeçalho Allow. |
Usuários da nuvem pública e privada do Edge |
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 Edge como um usuário com um papel apropriado.
Mude para a organização em que você quer investigar o problema.
- Acesse a página Analisar > Monitoramento de APIs > Investigar.
- Selecione o período específico em que você observou os erros.
Trace o código de falha em relação ao tempo.
Selecione uma célula que tenha o código de falha
protocol.http.Response405WithoutAllowHeader, conforme mostrado abaixo:
As informações sobre o código de falha
protocol.http.Response405WithoutAllowHeadersão mostradas abaixo:
Clique em Ver registros e expanda uma das solicitações com falha para ver mais informações.
- Na janela Registros, anote os seguintes detalhes:
- Código de status:
502 - Origem da falha:
target - Código de falha:
protocol.http.Response405WithoutAllowHeader.
- Código de status:
- Se a origem da falha for
targete o código de falha forprotocol.http.Response405WithoutAllowHeader, isso indica que o servidor de back-end respondeu com o código de status405 Method Not Allowedsem o cabeçalhoAllow.
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 para reproduzir o problema -
502 Bad Gatewayerro
- 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 trace.
- Navegue pelas diferentes fases do trace e localize onde a falha ocorreu.
O erro geralmente é encontrado em um fluxo após a fase Solicitação enviada ao servidor de destino conforme mostrado abaixo:
Anote o valor do erro no trace.
O trace de amostra acima mostra o erro como
Received 405 Response without Allow Header. Como o erro é gerado pela Apigee depois que a solicitação é enviada ao servidor de back-end isso indica que o servidor de back-end enviou o código de status de resposta405sem o cabeçalhoAllow.- Navegue até a fase AX (dados de análise registrados) no trace e clique nela.
Role para baixo até a seção Cabeçalhos de erro / resposta no painel Detalhes da fase e determine os valores de X-Apigee-fault-code e X-Apigee-fault-source , conforme mostrado abaixo:
- Os valores de X-Apigee-fault-code e X-Apigee-fault-source serão
protocol.http.Response405WithoutAllowHeaderetargetrespectivamente, indicando que esse erro é causado porque o back-end enviou o código de status de resposta405sem o cabeçalhoAllow.Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-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~ORG.PORT#_access_log
Em que:ORG, ORG e PORT# são substituídos por valores reais.
- Pesquise para ver se há erros
502com o código de erroprotocol.http.Response405WithoutAllowHeaderdurante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha com502. Se você encontrar erros
502com o X-Apigee-fault-code correspondente ao valor deprotocol.http.Response405WithoutAllowHeader, 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.Response405WithoutAllowHeaderX-Apigee-fault-source target
Causa: resposta 405 sem cabeçalho "Allow" do servidor de back-end
Diagnóstico
- Determine o código de falha e a origem da falha para
502 Bad Gatewayusando o Monitoramento de APIs, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns do diagnóstico. - Se o código de falha for
protocol.http.Response405WithoutAllowHeadere a origem da falha tiver o valortarget, isso indica que o servidor de back-end respondeu com um código de status405sem o cabeçalhoAllow. Portanto, a Apigee responde com502 Bad Gatewaycom o código de erroprotocol.http.Response405WithoutAllowHeader.
Resolução
Use um dos seguintes métodos para resolver o problema:
Servidor de back-end
Opção 1: corrija o servidor de back-end para enviar o código de status 405 com o cabeçalho "Allow":
Verifique se o servidor de back-end sempre segue a especificação RFC 7231, seção 6.5.5: 405 Método não permitido e envia com o
405status code incluindo a lista de métodos permitidos como parte de um cabeçalhoAllowconforme mostrado abaixo:Allow: HTTP_METHODS
- Por exemplo, se o servidor de back-end permitir os métodos
GET,POSTeHEAD, você precisará garantir que o cabeçalhoAllowos contenha da seguinte maneira:Allow: GET, POST, HEAD
Tratamento de falhas
Opção 2: use o tratamento de falhas para enviar o código de status 405 com o cabeçalho "Allow" do proxy de API:
Se o servidor de back-end retornar o 405 código de status sem o Allow
cabeçalho, você poderá usar o tratamento de falhas para responder com o 405 código de status e o
Allow cabeçalho do proxy de API da seguinte maneira:
Crie uma política, como a política AssignMessage ou RaiseFault e defina o código de status como
405com o cabeçalhoAllowe uma mensagem personalizada.Exemplo de política AssignMessage para enviar 405 com cabeçalho "Allow":
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Crie um
FaultRulenoTargetEndpointque invoque a política ao receber o erro502com o código de erroprotocol.http.Response405WithoutAllowHeader.Exemplo de configuração de TargetEndpoint mostrando FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Salve essas alterações em uma nova revisão do proxy de API e implante a revisão.
- Faça as chamadas de API e verifique se você está recebendo o código de status
405com oAllowcabeçalho.
Configurar propriedade
Opção 3: configure a propriedade no processador de mensagens para impedir que o Apigee Edge retorne o erro 502
- Se você for um usuário da nuvem privada, poderá atualizar a propriedade
HTTP.ignore.allow_header.for.405paratruepara impedir que o Apigee Edge gere um erro502, mesmo que o servidor de back-end responda com o código de status405sem o cabeçalhoAllowusando o guia de instruções: Configurar o cabeçalho "Allow" de ignorar para a propriedade 405 nos processadores de mensagens. - Se você for um usuário da nuvem pública, entre em contato com o suporte do Apigee Edge
Especificação
A Apigee espera a resposta 405 Method Not Allowed do servidor de back-end junto
com o cabeçalho Allow, de acordo com as seguintes especificações:
| Especificação | |
|---|---|
| RFC 7231, seção 6.5.5: 405 Método não permitido | |
| RFC 7231, seção 7.4.1: permitir |
Pontos principais a serem observados
A solução recomendada é corrigir o servidor de back-end para enviar o código de status 405 com o cabeçalho Allow e seguir a especificação
RFC 7231, seção 6.5.5: 405 Método não permitido.
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
Se o problema persistir mesmo depois de seguir as instruções acima, reúna 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 de API
- Comando
curlcompleto usado para reproduzir o502 Bad Gatewaycom o código de erroprotocol.http.Response405WithoutAllowHeader - Arquivo de trace para as solicitações de API
Se você for um usuário da nuvem privada, forneça as seguintes informações:
- Mensagem de erro completa observada para as solicitações com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de trace para as solicitações de API
Registros de acesso do NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Em que:ORG, ORG 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