502 Gateway inválido - Resposta 405 sem cabeçalho de permissão

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:

  1. Faça login na interface do Edge como um usuário com um papel apropriado.
  2. Mude para a organização em que você quer investigar o problema.

    lista suspensa da organização
  3. Acesse a página Analisar > Monitoramento de APIs > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Trace o código de falha em relação ao tempo.

  6. Selecione uma célula que tenha o código de falha protocol.http.Response405WithoutAllowHeader, conforme mostrado abaixo:

  7. As informações sobre o código de falha protocol.http.Response405WithoutAllowHeader são mostradas abaixo:

  8. Clique em Ver registros e expanda uma das solicitações com falha para ver mais informações.

  9. Na janela Registros, anote os seguintes detalhes:
    • Código de status:502
    • Origem da falha:target
    • Código de falha:protocol.http.Response405WithoutAllowHeader.
  10. Se a origem da falha for target e o código de falha for protocol.http.Response405WithoutAllowHeader, isso indica que o servidor de back-end respondeu com o código de status 405 Method Not Allowed sem o cabeçalho Allow.

Ferramenta Trace

Para diagnosticar o erro usando a ferramenta Trace:

  1. 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 para reproduzir o problema - 502 Bad Gateway erro
  2. Verifique se a opção Mostrar todos os FlowInfos está ativada:

  3. Selecione uma das solicitações com falha e examine o trace.
  4. Navegue pelas diferentes fases do trace e localize onde a falha ocorreu.
  5. O erro geralmente é encontrado em um fluxo após a fase Solicitação enviada ao servidor de destino conforme mostrado abaixo:

  6. 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 resposta 405 sem o cabeçalho Allow.

  7. Navegue até a fase AX (dados de análise registrados) no trace e clique nela.
  8. 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:

  9. Os valores de X-Apigee-fault-code e X-Apigee-fault-source serão protocol.http.Response405WithoutAllowHeader e targetrespectivamente, indicando que esse erro é causado porque o back-end enviou o código de status de resposta 405 sem o cabeçalho Allow.
    Cabeçalhos de resposta Valor
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

Para diagnosticar o erro usando registros de acesso do NGINX:

  1. 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.
  2. 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.

  3. Pesquise para ver se há erros 502 com o código de erro protocol.http.Response405WithoutAllowHeader durante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha com 502.
  4. Se você encontrar erros 502 com o X-Apigee-fault-code correspondente ao valor de protocol.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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

Causa: resposta 405 sem cabeçalho "Allow" do servidor de back-end

Diagnóstico

  1. Determine o código de falha e a origem da falha para 502 Bad Gateway usando o Monitoramento de APIs, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns do diagnóstico.
  2. Se o código de falha for protocol.http.Response405WithoutAllowHeader e a origem da falha tiver o valor target, isso indica que o servidor de back-end respondeu com um código de status 405 sem o cabeçalho Allow. Portanto, a Apigee responde com 502 Bad Gateway com o código de erro protocol.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":

  1. 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 405 status code incluindo a lista de métodos permitidos como parte de um cabeçalho Allow conforme mostrado abaixo:

    Allow: HTTP_METHODS
  2. Por exemplo, se o servidor de back-end permitir os métodos GET, POST e HEAD, você precisará garantir que o cabeçalho Allow os 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:

  1. Crie uma política, como a política AssignMessage ou RaiseFault e defina o código de status como 405 com o cabeçalho Allow e 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>
  2. Crie um FaultRule no TargetEndpoint que invoque a política ao receber o erro 502 com o código de erro protocol.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>
  3. Salve essas alterações em uma nova revisão do proxy de API e implante a revisão.
  4. Faça as chamadas de API e verifique se você está recebendo o código de status 405 com o Allow cabeçalho.

Configurar propriedade

Opção 3: configure a propriedade no processador de mensagens para impedir que o Apigee Edge retorne o erro 502

  1. Se você for um usuário da nuvem privada, poderá atualizar a propriedade HTTP.ignore.allow_header.for.405 para true para impedir que o Apigee Edge gere um erro 502, mesmo que o servidor de back-end responda com o código de status 405 sem o cabeçalho Allow usando o guia de instruções: Configurar o cabeçalho "Allow" de ignorar para a propriedade 405 nos processadores de mensagens.
  2. 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 curl completo usado para reproduzir o 502 Bad Gateway com o código de erro protocol.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

Referências

Tratamento de falhas na Apigee