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 de 502 Bad Gateway com código de erro
protocol.http.TooBigLine 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 a seguinte mensagem de erro:
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}Causas possíveis
Este erro ocorre se o tamanho da Response-Line enviado pelo servidor de destino/back-end para a Apigee O Edge, como parte da resposta HTTP, é maior que o máximo permitido máximo no Apigee Edge.
Antes de analisarmos as possíveis causas desse erro, vamos entender o que é o campo de linha de significa e como verificar o tamanho dele.
Como entender a linha de resposta
Uma resposta HTTP típica consiste em três partes:
- Status-Line (chamado de Response-Line na Apigee)
- ( Conjunto de cabeçalhos HTTP )
- [Corpo ]
A linha de resposta consiste em três partes: versão do protocolo, seguida por um valor numérico de status e a frase textual associada correspondente, conforme mostrado abaixo:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Quando uma resposta HTTP é enviada pelo aplicativo de servidor de destino/back-end, a primeira linha que é
enviado representa a linha de resposta conforme descrito acima. Isso é seguido pelo
cabeçalhos e corpo da resposta/payload.A captura de tela abaixo mostra um exemplo
solicitação curl, as partes Solicitação e Resposta (junto com o
linha de resposta).
Como entender o tamanho da linha de resposta
No exemplo discutido acima, a linha start (primeira linha) na resposta também chamado de Linha de resposta é o seguinte:
HTTP/1.1 200 OK
Esta linha de resposta tem o tamanho
~15 bytesporque contém15 ASCII characters. Como isso está dentro do permitido no Apigee Edge, a resposta é enviada de volta ao cliente sem erros pelo Apigee Edge.- Da mesma forma, se você analisar o
faultstringna A mensagem de erro mostrada acima contém"response line size exceeding 2,048". Isso indica que a Response-Line na resposta HTTP enviado pelo servidor de destino/back-end excedeu 2.048 bytes.
Noções básicas sobre linhas de resposta grandes
De acordo com a definição de Status-Linha (chamada de Linha de resposta aqui) e solicitações HTTP típicas e o tamanho seria muito menor que o limite padrão definido de 2 K no Apigee Edge, então talvez não atingir o limite. No entanto, confira alguns cenários possíveis em que você pode exceder esse limite:
- O servidor de destino/back-end não é um sistema HTTP. Ele pode estar respondendo com uma mensagem resposta.
- O servidor de destino/back-end tem problemas e envia uma longa linha de resposta como parte da solicitação resposta.
Leia mais sobre isso em Recebendo o error protocol.http.TooBigLine, "tamanho da linha de resposta excedendo 2.048.
Estas são as possíveis causas do erro:
| Causa | Descrição | Instruções de solução de problemas aplicáveis para |
|---|---|---|
| O tamanho da linha de resposta é maior que o limite permitido | O tamanho da Response-Line enviada pelo servidor de destino/back-end como parte do A resposta HTTP para o Apigee Edge é maior que limite permitido no Apigee Edge | 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.
- Selecione o filtro Proxy para restringir o código de falha.
- Compare Código de falha com Time.
Selecione uma célula que tenha o código de falha
protocol.http.TooBigLinecomo mostrados abaixo:
As informações sobre o código de falha serão exibidas
protocol.http.TooBigLine, 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.TooBigLine.
- Código de status:
- Se Origem da falha tiver o valor
targete o valor Code tem o valorprotocol.http.TooBigLine, então isso indica que a resposta HTTP do servidor de destino/ back-end tem um tamanho de linha de resposta maior que o limite máximo permitido no Apigee Edge.
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
- 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:
Observe os valores do erro no trace:
- erro:
response line exceeding 2,048 - error.class:
com.apigee.errors.http.server.BadGateway
Isso indica que o Apigee Edge (componente processador de mensagens) gera o erro como assim que recebe a resposta do servidor de back-end devido a um tamanho de linha de resposta excedendo o limite permitido.
- erro:
Você verá a mensagem de erro enviada ao cliente no campo Response Sent to cliente, conforme mostrado abaixo:
- Observe os valores do erro no trace:
- Erro:
502 Bad Gateway. - Conteúdo do erro:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Erro:
Você também pode navegar para a fase AX (Analytics Data Recorded) no trace e clicar nele para conferir os detalhes do erro.
Observe o valor do seguinte:
Cabeçalhos de solicitação Valor X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetConteúdo do erro : corpo {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
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~ENV.PORT#_access_logOnde:ORG, ENV e PORT# são substituídos por valores reais.
- Pesquise se há erros
502durante 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 deprotocol.http.TooBigLine, em seguida, determine o valor de X-Apigee-fault-source.
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.TooBigLineX-Apigee-fault-source target
Causa: o tamanho da linha de resposta é maior que o limite permitido
Diagnóstico
- Determine o código da falha e a fonte da falha do erro observado usando a API registros de acesso do Monitoring, da ferramenta Trace ou do NGINX, conforme explicado em Etapas comuns de diagnóstico.
- Se a Origem da falha tiver o valor
target, isso indica que o O tamanho da linha de resposta enviado pelo aplicativo de servidor de destino/back-end à Apigee é maior que o limite permitido no Apigee Edge. Você pode confirmar que o tamanho da linha de resposta excedeu o limite permitido de 2 KB usando uma dos seguintes métodos:
Mensagem de erro
Para validar usando a mensagem de erro:
Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte o
faultstring:Exemplo de mensagem de erro:
"faultstring":"response line size exceeding 2,048"
O
faultstringacima indica que o tamanho da linha de resposta excedeu o permitido máximo de 2 KB.Solicitação real
Para fazer a validação usando a solicitação real:
Se você tem acesso à solicitação real feita ao servidor de destino/back-end e execute as seguintes etapas:
- Verifique o tamanho da linha de resposta
- Se você achar que o tamanho do URI é maior do que
limite permitido no Apigee Edge, essa será a causa dos
o problema.
Exemplo de resposta do servidor de destino/back-end:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
No caso acima, a linha de resposta
HTTP/1.1 200 1111…<trimmed>...11111111é maior que 2 KB, ou seja, contém mais de 2 mil caracteres ASCII.Se você estiver usando outro cliente, revise os registros dele e tente para descobrir o tamanho da linha de resposta enviada ao Apigee Edge.
Registros do processador de mensagens
Para validar usando registros do processador de mensagens:
Se você for um usuário da nuvem privada, poderá usar os registros do processador de mensagens para: validar se o tamanho da linha de resposta excedeu o limite permitido no Apigee Edge.
- Determinar o ID da mensagem da solicitação com falha usando a API Monitoring, a ferramenta Trace ou do NGINX, conforme explicado nas Etapas comuns de diagnóstico.
Pesquise o ID da mensagem no registro do processador de mensagens:
/opt/apigee/var/log/edge-message-processor/logs/system.logVocê vai encontrar linhas de
system.logsemelhantes às seguintes:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
O texto
message = response line size exceeding 2,048no exemplo acima indica que o tamanho da linha de resposta é superior a 2 KB. Portanto, A Apigee Edge gera a exceção e retorna um código de status502com código de falhaprotocol.http.TooBiglineaos aplicativos clientes.
Resolução
Corrigir tamanho
Opção 1 [recomendada]: corrigir o aplicativo de servidor de destino/back-end para não enviar Linhas de resposta com tamanho maior que o limite permitido
- Analisar o motivo pelo qual o cliente específico enviou uma linha de resposta de tamanho maior do que o limite permitido, conforme definido em Limites.
- Se não for desejável, modifique seu aplicativo de servidor de destino/back-end para que envia uma linha de resposta com tamanho inferior ao limite permitido.
- Se for desejável e você quiser enviar uma linha de resposta com tamanho maior que limite permitido, vá para as próximas opções.
CwC
Opção 2: usar a propriedade CwC para aumentar o limite da linha de resposta
A Apigee fornece um CwC que permite aumentar o limite de tamanho da linha de resposta. Para mais detalhes, consulte Definir o limite de linha de resposta no processador de mensagens.
Limites
A Apigee espera que o aplicativo cliente e o servidor de back-end não enviem linhas de solicitação/resposta com tamanhos maiores que o limite permitido, conforme documentado para o Limite de linha de solicitação/resposta em Limites do Apigee Edge.
- Se você for um usuário da nuvem pública, o limite máximo de solicitações e O tamanho da linha de resposta está conforme documentado em Tamanho da linha de solicitação/resposta em Limites do Apigee Edge.
- Se você for um usuário da nuvem privada , talvez tenha modificado o valor máximo padrão limite para o tamanho da solicitação e da linha de resposta (mesmo que não seja uma prática recomendada). Você pode determinar o limite máximo de tamanho de linha de resposta seguindo as instruções em Como verificar o limite atual
Como verificar o limite atual?
Nesta seção, explicamos como verificar se a propriedade HTTPResponse.line.limit
foi atualizada com um novo valor nos processadores de mensagens.
- Na máquina do processador de mensagens, pesquise a propriedade
HTTPResponse.line.limitno diretório/opt/apigee/edge-message-processor/confe verificar veja qual valor foi definido conforme mostrado abaixo:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- O resultado de amostra do comando acima é o seguinte:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
No exemplo de saída acima, observe que a propriedade
HTTPResponse.line.limitfoi definido com o valor2knohttp.properties.Isso indica que o limite do tamanho da linha de resposta configurado na Apigee para Private Google Cloud tem 2 KB.
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 curl completo usado para reproduzir o erro
502 - 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 da organização
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento das solicitações de API com falha
- Comando
curlcompleto usado para reproduzir o erro502 Registros de acesso do NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logOnde: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