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 bytes
porque 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
faultstring
na 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 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.TooBigLine
como 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 a Origem da falha tiver o valor
target
e 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
flowinfo
apenas 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.TooBigLine
X-Apigee-fault-source target
Conteú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_log
Onde:ORG, ENV e PORT# são substituídos por valores reais.
- Pesquise se há erros
502
durante 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
502
no 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.TooBigLine
X-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
faultstring
acima indica que o tamanho da linha de resposta excedeu o permitido máximo de 2 KB.Solicitação real
Para validar 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.log
Você vai encontrar linhas de
system.log
semelhantes à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,048
no 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 status502
com código de falhaprotocol.http.TooBigline
aos 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 de 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.limit
no diretório/opt/apigee/edge-message-processor/conf
e 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.limit
foi definido com o valor2k
nohttp.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
curl
completo usado para reproduzir o erro502
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