414 URI de solicitação muito longo - TooBigLine

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Sintoma

O aplicativo cliente recebe um código de status HTTP 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ê pode observar a seguinte mensagem de erro:

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Observe que 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 ocorre se o tamanho da linha de solicitação enviada pelo aplicativo cliente para o Apigee Edge como parte da solicitação HTTP for maior que o limite permitido no Apigee Edge.

Antes de analisarmos as possíveis causas desse erro, vamos entender o que significa a linha de solicitação e como verificar o tamanho dela.

Noções básicas sobre a linha de solicitação

Uma solicitação HTTP comum consiste em três partes:

  1. Linha de solicitação
  2. ( Conjunto de cabeçalhos HTTP )
  3. [ Corpo ]

A linha de 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 linha de solicitação descrita acima. Ela é seguida pelos cabeçalhos e pelo corpo/payload da solicitação.

A captura de tela de exemplo a seguir mostra uma solicitação curl típica, a parte Solicitação (junto com a linha de solicitação) e a parte Resposta.

Noções básicas sobre o tamanho da linha de solicitação

  1. No exemplo discutido acima, a linha inicial (primeira linha) na solicitação, também chamada de linha de solicitação, é a seguinte:
    GET /test/ HTTP/1.1

    O tamanho da linha de solicitação é ~19 bytes já que ela contém 19 ASCII characters. Como isso está dentro do limite permitido no Apigee Edge, a solicitação é processada sem erros e você recebe uma resposta bem-sucedida.

  2. Da mesma forma, se você analisar o faultstring na mensagem de erro mostrada acima, ele 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.

Confira 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 da solicitação enviado pelo aplicativo cliente como parte da solicitação HTTP para o Apigee Edge é maior que o limite permitido no Apigee Edge. Usuários da nuvem pública e privada do Edge

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 um usuário com um papel apropriado.
  2. Alterne para a organização em que você quer investigar o problema.

  3. Acesse a página Analisar > Monitoramento de APIs > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Trace o código de falha em relação ao tempo.
  6. Selecione uma célula que tenha o código de falha protocol.http.TooBigLine e código de status 414, conforme mostrado abaixo:

    ( ampliar imagem)

  7. As informações sobre o código de falha protocol.http.TooBigline serão mostradas conforme abaixo:

    ( ampliar imagem)

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

    ( ampliar imagem)

  9. Na janela Registros, anote os seguintes detalhes:

    • Código de status:414
    • Origem da falha:apigee
    • Código de falha:protocol.http.TooBigLine.
    • Comprimento da solicitação(bytes) : 7244 (> 7KB)
  10. Se a origem da falha tiver o valor apigee ou MP, o código de falha tiver o valor protocol.http.TooBigLine e o comprimento da solicitação for maior que 7 KB, isso indica que a solicitação HTTP do cliente tem um URI de solicitação maior que o limite permitido na Apigee.

Ferramenta Trace

NGINX

Para diagnosticar o erro usando registros de acesso do NGINX:

  1. Se você for um usuário do Private Cloud, poderá usar os registros de acesso do NGINX para determinar as informações principais sobre erros HTTP 414.
  2. Verifique os registros de acesso do NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Em que: ORG, ENV e PORT# são substituídos por valores reais.

  3. Pesquise para verificar se há erros 414 durante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha 414.
  4. Se você encontrar erros 414 com o X-Apigee-fault-code correspondente ao valor de protocol.http.TooBigLine, determine o valor de X-Apigee-fault-source.

    A entrada de exemplo acima do registro de acesso do NGINX 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 policy

    Observe o comprimento da solicitação:7244 (7.244 KB > limite permitido)

Causa: o tamanho do payload da solicitação é maior que o limite permitido

Diagnóstico

  1. Determine o código de falha, a origem da falha e o tamanho do comprimento da solicitação para o erro observado usando o Monitoramento de APIs, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns do diagnóstico.
  2. Se a origem da falha tiver o valor apigee ou MP, 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 validar se o tamanho da linha de solicitação excedeu o limite permitido de 7 KB usando um 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, então consulte o faultstring. O faultstring indica que o tamanho da linha de solicitação excedeu o limite permitido de 7 KB.

    Mensagem de erro de exemplo:

    "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, siga estas etapas:

    1. Verifique o tamanho do URI transmitido na solicitação.
    2. Se você descobrir que o tamanho do URI é maior que o limite permitido no Apigee Edge, essa é 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 é maior que 7 KB, ou seja, contém mais de 7 mil caracteres ASCII.

      Se você estiver usando outro cliente, revise os registros do cliente 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 registros do processador de mensagens:

    Se você for um usuário do Private Cloud, 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.

    1. Verifique os registros do processador de mensagens:

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

    2. Pesquise para verificar se há erros 414 durante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha 414. Você pode usar as seguintes strings de pesquisa.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. Você vai encontrar linhas de system.log semelhantes a estas:
      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 mensagem de erro acima indica que o tamanho do URI de solicitação é maior que 7 kB. Portanto, o Apigee Edge gera a exceção com.apigee.errors.http.user.RequestURITooLong e retorna 414 código de status com código de falha protocol.http.TooBigline para aplicativos clientes.

Resolução

Corrigir tamanho

Opção 1 [recomendada]: corrigir o aplicativo cliente para não enviar um URI de solicitação com tamanho maior que o limite permitido

  1. Analise o motivo pelo qual o cliente específico envia um URI de solicitação com tamanho maior que o limite permitido, conforme definido em Limites.
  2. Se não for desejável, modifique o aplicativo cliente para que ele envie um URI de solicitação com tamanho menor que o limite permitido.

    No exemplo discutido acima, você pode corrigir o problema transmitindo o parâmetro de consulta longo como parte do corpo/payload da solicitação, em vez de transmiti-lo como parte do URL da solicitação, conforme mostrado abaixo:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Se for desejável e você quiser enviar um URI maior que o limite permitido, acesse as próximas opções.

CwC

Opção 2 : usar a propriedade CwC para aumentar o limite da linha de solicitação

A Apigee oferece 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 linhas de solicitação/resposta com tamanhos maiores que o limite permitido, conforme documentado para Limite de linha de solicitação/resposta em Limites do Apigee Edge.

  1. Se você for um usuário da nuvem pública, o limite máximo para o tamanho da linha de solicitação e resposta será conforme documentado para Tamanho da linha de solicitação/resposta em Limites do Apigee Edge.
  2. Se você for um usuário do Private Cloud , poderá ter modificado o limite máximo padrão para o tamanho da linha de solicitação e resposta (embora 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?

Esta seção explica como verificar se a propriedade HTTPRequest.line.limit foi atualizada com um novo valor nos processadores de mensagens.

  1. Na máquina do processador de mensagens, pesquise a propriedade HTTPRequest.line.limit no /opt/apigee/edge-message-processor/conf diretório e verifique qual valor foi definido, conforme mostrado abaixo:
    grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. O resultado de exemplo do comando acima é o seguinte:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
  3. No exemplo de saída acima, observe que a propriedade HTTPRequest.line.limit foi definida com o valor 7k em http.properties.

    Isso indica que o limite para o tamanho da linha de solicitação configurado na Apigee for Private Cloud é de 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

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 da API
  • Comando curl completo usado para reproduzir o erro 414
  • Arquivo de trace para as solicitações de API

Se você for um usuário do Private Cloud, forneça as seguintes 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 trace para as solicitações de API com falha
  • Comando curl completo usado para reproduzir o erro 414
  • Registros de acesso do NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Em que: 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