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.DuplicateHeader 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 uma mensagem de erro semelhante à mostrada abaixo:
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}Causas possíveis
Esse erro ocorre quando um cabeçalho HTTP específico que não pode ter cópias no Apigee Edge aparece mais de uma vez com valores iguais ou diferentes como parte da resposta HTTP enviada pelo servidor de back-end para o Apigee Edge.
De acordo com
RFC 7230, seção 3.2.2: ordem de campo, um remetente NÃO DEVE gerar vários campos de cabeçalho
com o mesmo nome de campo em uma mensagem, a menos que o valor do campo inteiro para esse
campo de cabeçalho seja definido como uma lista separada por vírgulas, [ou seja, #(values)] ou o campo de cabeçalho seja uma
exceção conhecida. Se o Apigee Edge encontrar um cabeçalho específico que não pode ter cópias e for enviado mais de uma vez na resposta HTTP enviada pelo servidor de destino/back-end, ele responderá com 502 Bad Gateway e o código de erro protocol.http.DuplicateHeader
Confira as possíveis causas desse erro:
| Causa | Descrição | Instruções de solução de problemas aplicáveis para |
|---|---|---|
| Cabeçalho duplicado na resposta | A resposta do servidor de back-end contém cabeçalhos duplicados. | 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 da Apigee Edge como um usuário com um papel apropriado.
Alterne 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.
- Verifique se o filtro Proxy está definido como Todos.
- Trace o código de falha em relação ao tempo.
Selecione uma célula que tenha o código de falha
protocol.http.DuplicateHeader, conforme mostrado abaixo:
As informações sobre o código de falha
protocol.http.DuplicateHeadersão mostradas abaixo:
- Verifique se o código de status é
502, conforme mostrado no exemplo acima. - 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.DuplicateHeader.
- Código de status:
- A origem da falha é
target, o que indica que a resposta do servidor de back-end continha cabeçalhos duplicados.
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 Gatewayerro
- Aguarde a ocorrência do erro
Verifique se a opção Mostrar todas as informações de fluxo 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 exemplo acima mostra o erro como
Duplicate Header "Expires". 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 cabeçalhoExpiresmais de uma vez.- Navegue até a fase AX (dados de análise registrados) no trace e clique nela.
Role para baixo até a seção Detalhes da fase - Cabeçalhos de resposta 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.DuplicateHeaderetarget, indicando que esse erro é causado porque cabeçalhos duplicados foram transmitidos pelo servidor de back-end para o cabeçalho de respostaExpires.Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source target Verifique se você está usando o encadeamento de proxy; ou seja, se o servidor de destino ou o endpoint de destino está invocando outro proxy na Apigee.
Para determinar isso, navegue de volta para a fase Solicitação enviada ao servidor de destino. Clique em Mostrar Curl.
A janela Curl para solicitação enviada ao servidor de destino é aberta, e você pode determinar o alias do host do servidor de destino.
- Se o alias do host do servidor de destino estiver apontando para um alias de host virtual, ele será encadeado por proxy
encadeamento. Nesse caso, repita todas as etapas acima para o proxy encadeado até
determinar o que está causando o
502 Bad Gatewayerro. - Se o alias do host do servidor de destino apontar para o servidor de back-end, isso indica que o servidor de back-end está enviando os cabeçalhos duplicados na resposta para a Apigee.
NGINX
Para diagnosticar o erro usando registros de acesso do NGINX:
- Se você for um usuário do Private Cloud, poderá usar os registros de acesso do NGINX para
determinar as informações principais sobre erros HTTP
502. Verifique os registros de acesso do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logEm que: ORG, ENV e PORT# são substituídos por valores reais.
- Pesquise para ver se há erros
502durante 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.DuplicateHeader, então determine o valor de X-Apigee-fault-source.Exemplo de erro 502 do registro de acesso do NGINX:
A entrada de exemplo 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.DuplicateHeaderX-Apigee-fault-source target
Causa: cabeçalho duplicado na resposta
Diagnóstico
- Determine o código de falha e a origem da falha para o erro observado usando o Monitoramento de APIs ou os registros de acesso do NGINX, conforme explicado em Etapas comuns do diagnóstico.
- Se a origem da falha tiver o valor
target, isso indica que a resposta enviada pelo servidor de destino contém cabeçalhos duplicados. É possível determinar o cabeçalho real que é enviado mais de uma vez como parte da resposta usando um dos seguintes métodos:
Mensagem de erro
Usando a mensagem de erro:
Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte o
faultstring. Ofaultstringcontém o nome do cabeçalho que foi enviado mais de uma vez.Exemplo de mensagem de erro:
"faultstring":"Duplicate Header \"Expires\""
- Na mensagem de erro acima, é possível observar que o cabeçalho
Expiresé enviado mais de uma vez, conforme mostrado nafaultstring.
Solicitação real
Usando a solicitação real:
- Se você não tiver acesso à solicitação real feita ao servidor de destino, receba
o comando
curlcorrespondente da etapa 10.a e da etapa 10.b de Como usar a ferramenta Trace. Se você tiver acesso à solicitação real feita ao aplicativo do servidor de destino, siga estas etapas:
Faça uma chamada para o servidor de destino.
Exemplo de solicitação para o servidor de destino usado neste exemplo:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
Verifique a lista de cabeçalhos mostrada na resposta.
Exemplo de resposta do servidor de destino usado neste exemplo:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
No exemplo de solicitação acima, o cabeçalho
Expiresé enviado mais de uma vez. Portanto, essa solicitação falha com o502 Bad Gatewayerro e o código de erro:protocol.http.DuplicateHeader.Se o cabeçalho cujo nome aparece no
faultstringaparecer mais de uma vez na resposta do servidor de back-end, essa será a causa deste erro. No caso acima, o cabeçalhoExpiresé enviado mais de uma vez.
Resolução
Corrigir duplicação
Opção 1 [opção recomendada]: corrigir o servidor de back-end para não incluir cabeçalhos duplicados
- Analise o motivo pelo qual o servidor de back-end específico envia o cabeçalho duplicado
Expirese verifique se é adequado que os proxies de API aceitem isso. Na maioria dos casos, isso não será desejável de acordo com a especificação HTTP RFC7230. - Se não for desejável, modifique o aplicativo do servidor de destino para não enviar cabeçalhos duplicados.
No exemplo discutido acima, é notado que o cabeçalho
Expiresé enviado duas vezes com o mesmo valor, o que não é desejável. Para corrigir o problema, verifique se o servidor de destino transmite o cabeçalhoExpiresapenas uma vez. - Se for desejável e você quiser permitir os cabeçalhos duplicados, acesse a opção 2: usar a propriedade CwC.
CwC
Opção 2: usar a propriedade CwC
A Apigee fornece uma propriedade CwC
HTTPHeader.<HeaderName> ,que permite que aplicativos clientes e servidores de destino
enviem cabeçalhos duplicados para proxies de API no Apigee Edge.
| Propriedade CwC | Valores |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Por exemplo, a propriedade a seguir pode ser definida nos processadores de mensagens para permitir duplicados
e vários valores para o cabeçalho Expires.
HTTPHeader.Expires=allowDuplicates, multiValued
- Se você for um usuário do Private Cloud, poderá configurar a propriedade para impedir que o Apigee
Edge gere um erro
502 Bad Gateway, mesmo que a solicitação contenha cabeçalhos duplicados usando o guia de instruções Configuring Message Processors to use duplicate headers. - Se você for um usuário da nuvem pública, entre em contato com o suporte do Apigee Edge para configurar essa propriedade para sua organização.
Especificação
A Apigee responde com a resposta de erro 502 Bad Gateway, pois espera que o
servidor de back-end se comporte de acordo com as seguintes especificações da RFC:
| Especificação |
|---|
| RFC 7230, seção 3.2.2: ordem de campo |
| RFC 7230, seção 3.2: campos de cabeçalho |
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
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 da API
- Comando
curlcompleto usado para reproduzir o erro502 - Arquivo de trace para as solicitações de API
Se você for um usuário do Private Cloud, 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~ENV.PORT#_access_logEm que: 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