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
faultstringno 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.TooBigLinee 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
apigeeouMP, o O código da falha tem o valorprotocol.http.TooBigLinee 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_logOnde:ORG, ENV e PORT# são substituídos por valores reais.
- Pesquise se há erros
414durante 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
414no 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.TooBigLineX-Apigee-fault-source policyObserve 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
apigeeouMP, 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. Ofaultstringindica 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
qparamtem 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
414durante 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.logsemelhantes à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,168na 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.RequestURITooLonge retorna Código de status414com código de falhaprotocol.http.TooBiglinepara 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.limitno diretório/opt/apigee/edge-message-processor/confe 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.limitfoi definido com o valor7knohttp.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
curlcompleto 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
curlcompleto usado para reproduzir o erro414 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