431 Campos de cabeçalho da solicitação muito grandes - TooBigHeaders

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:

  1. Faça login na interface do Apigee Edge como usuário com um papel apropriado.
  2. Alterne para a organização em que você quer investigar o problema.

  3. Navegue até a página Analisar > Monitoramento de API > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Trace o Código de falha em relação a Time.
  6. Selecione uma célula que tenha o código de falha protocol.http.TooBigHeaders e o código de status 431, conforme mostrado abaixo:

    ( ver imagem ampliada)

  7. Você vai ver as informações sobre o código de falha protocol.http.TooBigHeaders, conforme mostrado abaixo:

    ( ver imagem ampliada)

  8. Clique em Ver registros e expanda a linha da solicitação com falha:

    ( ver imagem ampliada)

  9. 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)
  10. Se a Origem da falha tiver o valor apigee ou MP, o Código de falha terá o valor protocol.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:

  1. 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.
  2. 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.

  3. 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 com 431.
  4. Se você encontrar erros 431 com o X-Apigee-fault-code correspondente ao valor de protocol.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 ou MP, X-Apigee-fault-code tem o valor protocol.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

  1. 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.
  2. Se a Origem da falha tiver o valor apigee ou MP, o Código de falha tiver o valor protocol.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.
  3. É 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. O faultstring 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:

    1. Verifique o tamanho dos cabeçalhos transmitidos na solicitação.
    2. 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 e header3 é 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.

    1. Verifique os registros do processador de mensagens:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. 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 com 431. Você pode usar as seguintes strings de pesquisa.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. 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ção com.apigee.errors.http.user.RequestHeadersTooLarge e retorna o código de status 431 com código de falha protocol.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

  1. 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.
  2. 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>" }'
    
  3. 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.

  1. 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.
  2. 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.

  1. 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
    
  2. O resultado do exemplo do comando acima é o seguinte:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
  3. No exemplo de saída acima, observe que a propriedade HTTPRequest.headers.limit foi definida com o valor 25k em http.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 erro 431
  • 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 erro 431
  • 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