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 431 Request Header Fields Too
Large
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 431 Request Header Fields Too Large
Além disso, talvez você veja a seguinte mensagem de erro:
{ "fault":{ "faultstring":"request headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Causas possíveis
Esse erro vai ocorrer se o tamanho total de todos os cabeçalhos de solicitação enviados pelo aplicativo cliente para o Apigee Edge como parte da solicitação HTTP for maior do que o limite permitido no Apigee Edge, de acordo com RFC 6585, seção 5: campos de cabeçalho de solicitação 431 muito grandes.
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 da solicitação é maior que o limite permitido | O tamanho total de todos os cabeçalhos enviados pelo aplicativo cliente como parte da solicitação HTTP para o Apigee Edge é maior do 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.
- Trace o Código de falha em relação a Time.
- Selecione uma célula que tenha o código de falha
protocol.http.TooBigHeaders
e o código de status431
, conforme mostrado abaixo: Você vai 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:
431
- Origem da falha:
apigee
- Código de falha:
protocol.http.TooBigHeaders
. - Comprimento da solicitação(bytes):
32150 (> 25 KB)
- Código de status:
- Se a Origem da falha tiver o valor
apigee
ouMP
, o Código de falha terá o valorprotocol.http.TooBigHeaders
e o Comprimento da solicitação for maior que 25 KB. Isso indica que o tamanho total de todos os cabeçalhos da solicitação enviados pelo aplicativo cliente como parte da solicitação HTTP é maior que o limite permitido na Apigee.
Ferramenta de rastreamento
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 os erros HTTP
431
. 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
431
durante um período específico (se o problema aconteceu anteriormente) ou se há alguma solicitação que ainda falha com431
. Se você encontrar erros
431
com o X-Apigee-fault-code correspondente ao valor deprotocol.http.TooBigHeaders
, determine o valor de X-Apigee-fault-source.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 resposta Valor X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source MP
Observe o tamanho da solicitação:
40159
. 40 KB é maior que 25 KB, o limite permitido para cabeçalhos de solicitação no Apigee Edge.Na entrada de registro de amostra acima, X-Apigee-fault-source tem o valor
apigee
ouMP
, X-Apigee-fault-code tem o valorprotocol.http.TooBigHeaders
e Request Length tem 40 KB, o que é maior que o limite permitido na Apigee: 25 KB. Isso indica claramente que o tamanho total de todos os cabeçalhos de solicitação enviados pelo aplicativo cliente como parte da solicitação HTTP excedeu o limite permitido de 25 KB no Apigee Edge.
Causa: o tamanho dos cabeçalhos da solicitação é maior do que o limite permitido
Diagnóstico
- Determine o código de falha, a origem da falha e o tamanho da solicitação do erro observado usando os registros de monitoramento da API ou de acesso NGINX, conforme explicado em Etapas comuns de diagnóstico.
- Se a Origem da falha tiver o valor
apigee
ouMP
, o Código de falha tiver o valorprotocol.http.TooBigHeaders
e o Comprimento da solicitação tiver mais de 25 KB, isso indica que o tamanho da solicitação enviada pelo aplicativo cliente para a Apigee é maior que o limite permitido no Apigee Edge. - É possível confirmar se o tamanho dos cabeçalhos da solicitação excedeu o limite permitido de 25 KB usando um
destes 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 total dos cabeçalhos da solicitação excedeu o limite permitido de 25 KB.Exemplo de mensagem de erro:
"faultstring":"request headers size exceeding 25,600"
Solicitação real
Para validar usando a solicitação real, faça o seguinte:
Se você tiver acesso à solicitação real feita pelo aplicativo cliente, siga estas etapas:
- Verifique o tamanho dos cabeçalhos transmitidos na solicitação.
Se você achar que o tamanho total dos cabeçalhos é maior que o limite permitido no Apigee Edge, essa é a causa do problema.
Exemplo de solicitação:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
No caso acima, o tamanho total dos cabeçalhos
header0
,header1
,header2
eheader3
é maior que 25 KB, ou seja, contêm mais de 25 mil caracteres ASCII (bytes).Se você estiver usando outro cliente, revise os registros dele e tente descobrir o tamanho da linha de solicitação que está sendo enviada para o 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 da 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 se há erros
431
durante um período específico (se o problema ocorreu anteriormente) ou se há alguma solicitação que ainda falha com431
. Você pode usar as seguintes strings de pesquisa.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Você vai encontrar linhas de
system.log
semelhantes a estas:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
O texto
message = request headers size exceeding 25,600
na mensagem de erro acima indica que o tamanho total dos cabeçalhos da solicitação é superior a 25 KB. Portanto, o Apigee Edge gera a exceçãocom.apigee.errors.http.user.RequestHeadersTooLarge
e retorna o código de status431
com código de falhaprotocol.http.TooBigHeaders
para aplicativos clientes.
Resolução
Corrigir tamanho
Opção 1 [recomendada]: corrigir o aplicativo cliente para não enviar cabeçalhos de solicitação com tamanho total maior que o limite permitido
- Analise o motivo para o cliente específico enviar o cabeçalho da solicitação com tamanho grande, o que faz com que o tamanho total do cabeçalho seja maior do que o limite permitido, conforme definido em Limites.
Se não for o caso, modifique o aplicativo cliente para que ele envie cabeçalhos de solicitação de um tamanho menor que o limite permitido.
No exemplo discutido acima, é possível corrigir o problema transmitindo o parâmetro de valores do cabeçalho longo como parte do corpo/payload da solicitação:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- Se for desejável e você quiser enviar um cabeçalho além do limite permitido, vá para a próxima opção.
CwC
Opção 2 : usar a propriedade CwC para aumentar o limite da linha de solicitação
A Apigee fornece uma propriedade CwC que permite aumentar o limite de tamanho da linha de solicitação. Para mais detalhes, consulte Definir o limite da linha de solicitação no processador de mensagens.
Limites
A Apigee espera que o aplicativo cliente e o servidor de back-end não enviem cabeçalhos de solicitação/resposta com tamanhos maiores que o limite permitido, conforme documentado para o limite de tamanho de cabeçalhos 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ê é um usuário da 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 solicitação, siga as instruções em Como verificar o limite atual.
Como verificar o limite atual?
Esta seção explica como verificar se a propriedade HTTPRequest.headers.limit
foi atualizada com um novo valor nos processadores de mensagens.
- Na máquina do processador de mensagens, pesquise a propriedade
HTTPRequest.headers.limit
no diretório/opt/apigee/edge-message-processor/conf
e verifique qual valor foi definido conforme mostrado abaixo:grep -ri "HTTPRequest.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:HTTPRequest.headers.limit=25k
No exemplo de saída acima, observe que a propriedade
HTTPRequest.headers.limit
foi definida com o valor25k
emhttp.properties
.Isso indica que o limite para o tamanho do cabeçalho da solicitação configurado na Apigee para nuvem privada é de 25 KB.
Especificação
O Apigee Edge espera que o aplicativo cliente não envie cabeçalhos de tamanho grande como parte da
solicitação. Caso a solicitação contenha cabeçalhos com tamanho total maior que o limite especificado,
a Apigee gera 431 Request Header Fields Too Large
de acordo com as seguintes especificações de
RFC:
Especificação |
---|
RFC 6585, seção 5: campos de cabeçalho da solicitação 431 muito grandes (em inglês) |
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 erro431
- Arquivo de rastreamento das solicitações de API
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 erro431
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