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
código de erro protocol.http.TooBigHeaders
como 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, talvez você veja a seguinte mensagem de erro:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Causas possíveis
Esse erro vai ocorrer se o tamanho total dos cabeçalhos enviados pelo servidor de destino/back-end para o Apigee Edge como parte da resposta HTTP for maior do que o limite permitido no Apigee Edge.
Estas são as possíveis causas desse erro:
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
O tamanho dos cabeçalhos na resposta é maior do que o limite permitido | O tamanho do cabeçalho de um cabeçalho específico ou a soma dos tamanhos de todos os cabeçalhos enviados pelo servidor de destino/back-end como parte da resposta HTTP para o Apigee Edge é maior que o limite permitido no Apigee Edge. | 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.
- Selecione o filtro Proxy para restringir o código da falha.
- Trace o Código de falha em relação a Time.
Selecione uma célula com o código de falha
protocol.http.TooBigHeaders
, conforme mostrado abaixo:Você verá as informações sobre o código de falha
protocol.http.TooBigHeaders
, 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.TooBigHeaders
.
- Código de status:
- Se a Origem da falha tiver o valor
target
e o Código de falha tiver o valorprotocol.http.TooBigHeaders
, isso indica que a resposta HTTP do servidor de destino/ back-end tem cabeçalhos com tamanho maior que o limite permitido no Apigee Edge.
Ferramenta de rastreamento
- Ative a sessão de rastreamento
e:
- Aguarde a ocorrência do erro
502 Bad Gateway
ou - 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
- 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 esse erro no fluxo chamado Error logo após a fase Solicitação enviada para o servidor de destino, conforme mostrado abaixo:
Observe os valores do erro do trace:
- erro:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Isso indica que o Apigee Edge (componente de processador de mensagens) gera o erro assim que recebe a resposta do servidor de back-end devido a um tamanho de cabeçalho que excede o limite permitido.
- erro:
Você veria a falha na resposta de erro Resposta enviada ao cliente enviada pelo Apigee Edge, conforme mostrado abaixo:
- Observe os valores do erro do rastro. O rastro de amostra acima mostra:
- Erro:
502 Bad Gateway
. - Conteúdo do erro:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Erro:
Navegue para a fase AX (Analytics Data Recorded) no rastreamento e clique nela para ver os detalhes relacionados.
Observe o valor do seguinte:
Cabeçalhos de erro Valor X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Conteúdo do erro: corpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
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.TooBigHeaders
durante um período específico (se o problema tiver acontecido anteriormente) ou se ainda há solicitações com falha502
. Se você encontrar erros
502
com o X-Apigee-fault-code correspondente ao valor deprotocol.http.TooBigHeaders
, 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-code :
Cabeçalhos de erro Valor X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Causa: o tamanho dos cabeçalhos na resposta é maior do que o limite permitido
Diagnóstico
- Determine o código de falha, a origem da falha e o tamanho do payload da resposta do erro observado usando o monitoramento de APIs, a ferramenta de rastreamento ou os registros de acesso do NGINX, conforme explicado em Etapas comuns de diagnóstico.
- Se a Origem de falha tiver o valor
target
, isso indica que a resposta enviada pelo servidor de destino/back-end para a Apigee tem cabeçalhos com tamanho maior que o limite permitido no Apigee Edge. - É possível validar se a resposta do destino/back-end tem cabeçalhos com tamanho maior que o limite permitido usando um dos seguintes métodos:
Mensagem de erro
Para validar usando a mensagem de erro, siga estas etapas:
Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte
faultstring
. Ofaultstring
indica que o tamanho do cabeçalho da resposta excedeu o limite permitido.Exemplo de mensagem de erro:
"faultstring":"response headers size exceeding 25,600"
Na mensagem de erro acima, observe no
faultstring
que a resposta tem cabeçalhos com tamanho total que excede o limite permitido.Solicitação real
Para validar usando a solicitação real, faça o seguinte:
Se você tiver acesso à solicitação real feita ao servidor de destino/back-end, execute as seguintes etapas:
- Se você for um usuário da nuvem pública/privada, faça uma solicitação diretamente ao servidor de back-end a partir do próprio servidor de back-end ou de qualquer outra máquina de onde você tenha permissão para fazer a solicitação ao servidor de back-end.
- Se você for um usuário da nuvem privada, também poderá fazer a solicitação ao servidor de back-end a partir de um dos processadores de mensagens.
- Examine a resposta recebida do servidor de back-end e calcule especificamente e verifique o tamanho total dos cabeçalhos transmitidos na resposta.
Se você achar que o tamanho dos cabeçalhos no payload de resposta for maior do que o limite permitido no Apigee Edge, essa será a causa do problema.
Exemplo de resposta do servidor de destino:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactNo exemplo acima,
Testheader1
eTestheader2
têm tamanhos maiores, o que é a causa desse erro porque excede o limite permitido no Apigee Edge.
Registros do processador de mensagens
Para validar usando os registros do processador de mensagens:
Se você for um usuário de nuvem privada, poderá usar os registros do processador de mensagens para validar se o tamanho dos cabeçalhos de resposta excedeu o limite permitido no Apigee Edge.
Verifique os registros do processador de mensagens:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Pesquise se há erros
502
durante um período específico (se o problema ocorreu anteriormente) ou se há alguma solicitação que ainda falha com502
. Você pode usar a seguinte string de pesquisa:grep -ri "response headers size exceeding"
- Você encontrará linhas do
system.log
semelhantes às seguintes. O tamanho dos cabeçalhos de resposta pode variar no seu caso:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
Assim que o processador de mensagens receber a resposta do servidor de back-end/destino e descobrir que o tamanho total dos cabeçalhos é maior que 25 KB, ele para e gera o erro:
response headers size exceeding 25,600
Isso implica que o tamanho total do cabeçalho é maior que 25 KB, e a Apigee gera o erro quando o tamanho começa a exceder o limite de 25 KB com o código de falha como
protocol.http.TooBigHeaders
.
Resolução
Corrigir tamanho
Opção 1 [recomendada]: corrigir o aplicativo do servidor de destino para não enviar cabeçalhos que excedem o limite da Apigee
- Analise o motivo para o servidor de destino específico enviar o tamanho do cabeçalho de resposta além do limite permitido, conforme definido em Limites.
- Se não for, modifique o aplicativo de servidor de back-end para que ele envie cabeçalhos de resposta com tamanho menor que o limite permitido no Apigee Edge.
- Verifique se as informações do cabeçalho podem ser enviadas como parte do corpo da resposta.
- Se possível, envie qualquer informação grande que você planejava enviar como parte do cabeçalho no corpo da resposta. Isso garante que você não exceda o limite de cabeçalhos de resposta.
CwC
Opção 2 : usar a propriedade CwC para aumentar o limite de tamanho do cabeçalho da resposta
A Apigee fornece uma propriedade CwC que permite aumentar o limite de tamanho dos cabeçalhos de resposta. Para mais detalhes, consulte Como configurar limites para o processador de mensagens.
Limites
A Apigee espera que o aplicativo cliente e o servidor de back-end não enviem tamanhos de cabeçalho acima do limite permitido, conforme documentado para o tamanho do cabeçalho de solicitação/resposta em Limites do Apigee Edge.
- Se você for um usuário da nuvem pública, o limite máximo de tamanho de cabeçalhos de solicitação e resposta será conforme documentado em Tamanho do cabeçalho de solicitação/resposta em Limites do Apigee Edge.
- Se você for um usuário de nuvem privada , talvez tenha modificado o limite máximo padrão para o tamanho dos cabeçalhos de solicitação e resposta, mesmo que isso não seja uma prática recomendada. Para determinar o limite máximo de tamanho do cabeçalho da resposta, siga as instruções em Como verificar o limite atual.
Como verificar o limite atual?
Esta seção explica como verificar se a propriedade HTTPResponse.headers.limit
foi atualizada com um novo valor nos processadores de mensagens.
- Na máquina do processador de mensagens, pesquise a propriedade
HTTPResponse.headers.limit
no diretório/opt/apigee/edge-message-processor/conf
e verifique qual valor foi definido conforme mostrado abaixo:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- O resultado do exemplo do comando acima é o seguinte:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
No exemplo de saída acima, observe que a propriedade
HTTPResponse.headers.limit
foi definida com o valor25k
emhttp.properties
.Isso indica que o limite para o tamanho do payload de resposta configurado na Apigee para nuvem privada é de 25 KB.
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
- Saída completa da resposta do servidor de destino/back-end junto com o tamanho dos cabeçalhos
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 da organização
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento das solicitações de API com falha
- Completar o comando
curl
usado para reproduzir o erro502
- Saída completa da resposta do servidor de destino/back-end junto com o tamanho dos cabeçalhos
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