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 414 Request-URI Too Long
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 414 Request-URI Too Long
Além disso, você poderá encontrar a seguinte mensagem de erro:
{ "fault":{ "faultstring":"request line size exceeding 7,168", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
O faultstring
na mensagem de erro acima contém o limite permitido
para a linha de solicitação no Apigee Edge, que é 7168 bytes
(7 KB).
Causas possíveis
Esse erro ocorrerá se o tamanho da linha de solicitação enviada pelo aplicativo cliente para a Apigee Edge ocorrer. como parte da solicitação HTTP é maior que o limite permitido no Apigee Edge.
Antes de analisarmos as possíveis causas desse erro, vamos entender qual é a linha da solicitação significa e como verificar o tamanho dele.
Noções básicas sobre a linha de solicitação
Uma solicitação HTTP típica consiste em três partes:
- Linha de solicitação
- ( Conjunto de cabeçalhos HTTP )
- [Corpo ]
A linha da solicitação consiste em três partes, conforme mostrado abaixo.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Quando uma solicitação HTTP é feita pelo aplicativo cliente para um servidor, a primeira linha que vai para o servidor contém a Request-Line descrita acima. Isso é seguido pelo cabeçalhos e corpo/payload da solicitação.
A captura de tela de exemplo a seguir mostra uma solicitação curl
típica, a solicitação
(junto com a linha de solicitação) e a parte Response.
Como entender o tamanho da linha de solicitação
- No exemplo discutido acima, a linha start (primeira linha) na solicitação, também
chamada Linha de solicitação, é o seguinte:
GET /test/ HTTP/1.1
O tamanho da linha de solicitação é
~19 bytes
, porque contém19 ASCII characters
. Como isso está dentro do limite permitido no Apigee Edge, a solicitação será processada sem erros e você receberá uma resposta de sucesso. - Da mesma forma, se você analisar o
faultstring
no A mensagem de erro mostrada acima contém"request line size exceeding 7,168"
. Isso indica que a linha de solicitação na solicitação HTTP feita pelo cliente excedeu 7.168 bytes.
Estas são as possíveis causas desse erro:
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
O tamanho do payload da solicitação é maior que o limite permitido | O tamanho do URI de solicitação enviado pelo aplicativo cliente como parte da solicitação HTTP solicitação para o Apigee Edge é maior que o 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.
- Compare Código de falha com Time.
- Selecione uma célula que tenha o código de falha
protocol.http.TooBigLine
e código de status414
, como mostrado abaixo: Serão exibidas as informações sobre o código de falha
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:
414
- Origem da falha:
apigee
- Código da falha:
protocol.http.TooBigLine
. - Tamanho da solicitação(bytes):
7244 (> 7KB)
- Código de status:
- Se a Origem da falha tiver o valor
apigee
ouMP
, o O código da falha tem o valorprotocol.http.TooBigLine
e Request-Length é maior que 7 KB, o que indica que a solicitação HTTP do cliente tem um URI de solicitação maior que limite permitido na Apigee.
Ferramenta Trace
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
414
. 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
414
durante um período específico (se o problema tiver acontecido no passado) ou se houver alguma solicitação que ainda esteja falhando com414
: Se você encontrar erros
414
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-code
Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source policy
Observe o tamanho da solicitação:
7244
(7,244 KB > limite permitido)
Causa: o tamanho do payload da solicitação é maior que o limite permitido
Diagnóstico
- Determine o Código da falha, a Origem da falha e o Tamanho da solicitação-Comprimento do observado ao usar o monitoramento de APIs, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns de diagnóstico.
- Se a Origem da falha tiver o valor
apigee
ouMP
, esse indica que o tamanho da solicitação enviada pelo aplicativo cliente à Apigee é maior que o limite permitido no Apigee Edge. - É possível confirmar que o tamanho da linha de solicitação excedeu o limite permitido de 7 KB usando um dos
os 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
. Ofaultstring
indica o tamanho da linha de solicitação excedeu o limite permitido de 7 KB.Exemplo de mensagem de erro:
"faultstring":"request line size exceeding 7,168"
Solicitação real
Para validar usando a solicitação real:
Se você tiver acesso à solicitação real feita pelo aplicativo cliente, Depois, siga estas etapas:
- Verifique o tamanho do URI transmitido na solicitação.
Se você achar que o tamanho do URI é maior do que limite permitido no Apigee Edge, isso será a causa do problema.
Exemplo de solicitação:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
No caso acima, o valor do parâmetro de consulta
qparam
tem mais de 7 KB, ou seja, contém mais de 7 mil caracteres ASCII.Se você estiver usando outro cliente, revise os registros dele e tente descobrir o tamanho da linha de solicitação 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 solicitação 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 para ver se há algum erro
414
durante um processo duração (se o problema aconteceu no passado) ou se há alguma solicitação ainda falha com414
. Você pode usar as seguintes strings de pesquisa.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Você vai encontrar linhas de
system.log
semelhantes às seguintes:2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
O texto
message = request line size exceeding 7,168
na acima, a mensagem de erro acima indica que o tamanho do URI de solicitação é superior a 7 KB. Portanto, o Apigee Edge gera a exceçãocom.apigee.errors.http.user.RequestURITooLong
e retorna Código de status414
com código de falhaprotocol.http.TooBigline
para aplicativos clientes.
Resolução
Corrigir tamanho
Opção 1 [recomendada]: corrija o aplicativo cliente para que não envie um tamanho de URI de solicitação maior que o limite permitido
- Analisar o motivo pelo qual o cliente específico enviou um tamanho de URI de solicitação mais do que o limite permitido, conforme definido em Limites.
Se não for desejável, modifique seu aplicativo cliente para que ele envie o URI de solicitação um tamanho menor que o limite permitido.
No exemplo discutido acima, é possível corrigir o problema passando a consulta longa como parte do corpo/payload da solicitação em vez de passá-lo como parte do , como mostrado abaixo:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- Se for desejável e você quiser enviar um URI maior do que o limite permitido, vá para o próximas opções.
CwC
Opção 2 : usar a propriedade CwC para aumentar o limite de linha de solicitação
A Apigee oferece um CwC, que permite aumentar o limite de tamanho da linha de solicitação. Para mais detalhes, consulte Definir o limite de linhas de solicitação 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). É possível determinar o limite máximo de tamanho da linha de solicitação seguindo as instruções em Como verificar o limite atual
Como verificar o limite atual?
Nesta seção, explicamos como verificar se a propriedade HTTPRequest.line.limit
foi atualizada com um novo valor nos processadores de mensagens.
- Na máquina do processador de mensagens, pesquise a propriedade
HTTPRequest.line.limit
no diretório/opt/apigee/edge-message-processor/conf
e verificar veja qual valor foi definido conforme mostrado abaixo:grep -ri "HTTPRequest.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:HTTPRequest.line.limit=7k
No exemplo de saída acima, observe que a propriedade
HTTPRequest.line.limit
foi definido com o valor7k
nohttp.properties
.Isso indica que o limite do tamanho da linha de solicitação configurado na Apigee para Private Google Cloud tem 7 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 erro414
- 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 erro414
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