Skip to content

Código de status HTTP · Erros do cliente (4xx)

Erro 414 URI Too Long

O erro 414 URI Too Long significa que a URL pedida é maior do que o servidor aceita interpretar. Em geral vem de um GET carregando dados demais na query string, ou de um loop de redirecionamento que vai aumentando a URL.

Dados sobre este código de status
Classe4xx, Erros do cliente
Também chamado deRequest-URI Too Long, Request-URI Too Large
Definido emRFC 9110 §15.5.15
Pode ir para o cache por padrãoSim, de forma heurística
Pode repetir o pedidoNão; encurte a URL ou mova os dados para o corpo de um POST
Cabeçalhos relevantes
  • Cache-Control: o 414 pode ir para o cache de forma heurística, então defina se o limite puder mudar

O que significa o 414

A RFC 9110, seção 15.5.15, chama isso de condição rara e aponta três origens prováveis: um cliente que trocou um POST por um GET com query longa, um loop de redirecionamento em que o destino cresce a cada volta, e um ataque tentando estourar buffers. A resposta pode ser guardada em cache de forma heurística.

Quem define o limite é o servidor, não o protocolo. O nginx recusa uma linha de requisição maior que um buffer de large_client_header_buffers, 8 KB por padrão. O Apache usa LimitRequestLine, com padrão de 8190 bytes. O filtro do IIS vem com maxUrl 4096 e maxQueryString 2048, mas registra a violação como 404.14 ou 404.15 em vez de 414. O Node.js conta a URL dentro do limite de 16 KB de cabeçalhos e responde 431.

Causas comuns

Se você está visitando o site

  • Um link com parâmetro de rastreamento ou de estado enorme, muitas vezes copiado de um e-mail ou de uma busca com muitos filtros.
  • Um fluxo de login que aninha returnUrl ou redirect_uri dentro de si mesmo a cada volta.

Se você administra o servidor

  • O frontend serializa um conjunto grande de filtros, uma lista de IDs ou um objeto JSON inteiro na query string de um GET.
  • Uma regra de redirecionamento acrescenta algo ao caminho ou à query a cada salto, e a URL cresce até bater no limite.
  • Um formulário usa method="get" para campos que podem ter texto longo.

Como resolver

Se você está visitando o site

  • Apague a query string (tudo depois do ?) e navegue a partir do próprio site.
  • Limpe os cookies do site e entre de novo se o erro apareceu durante o login.

Se você administra o servidor

  • Mande entradas grandes no corpo de um POST. Para buscas que precisam continuar compartilháveis, guarde os filtros no servidor e coloque um ID curto na URL.
  • Rastreie os redirecionamentos com curl -sIL e corrija a regra que vai acrescentando; os cabeçalhos Location mostram a URL crescendo.
  • Só aumente o limite se as URLs longas forem legítimas: large_client_header_buffers 4 16k no nginx, LimitRequestLine no Apache.

Como enviar um 414

Express (Node.js)
app.use((req, res, next) => {
  if (req.originalUrl.length > 4096) {
    return res.status(414).json({ error: 'URL longer than 4096 characters' });
  }
  next();
});
Go net/http
func limitURL(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if len(r.RequestURI) > 4096 {
			http.Error(w, "URL too long", http.StatusRequestURITooLong) // 414
			return
		}
		next.ServeHTTP(w, r)
	})
}
Nginx
# A request line longer than one buffer gets 414.
# Default: large_client_header_buffers 4 8k;
http {
  large_client_header_buffers 4 16k;
}

Costuma ser confundido com

414 vs 413
O 413 recusa um corpo grande; o 414 recusa uma URL longa, e a correção costuma ser mover os dados da URL para o corpo.
414 vs 431
O 431 cobre campos de cabeçalho grandes demais; o Node.js informa uma URL longa demais como 431 porque conta a linha de requisição no limite de cabeçalhos.
414 vs 400
O nginx responde 400 quando uma única linha de cabeçalho é longa demais, e 414 só quando a linha de requisição é.

Perguntas frequentes

Qual o tamanho máximo de uma URL?
O HTTP não define máximo; a RFC 9110 recomenda aceitar pelo menos 8000 octetos. Os limites reais vêm dos servidores: cerca de 8 KB no nginx e no Apache por padrão, 4096 bytes no IIS, 16 KB de cabeçalhos no total no Node.js.
Como resolver o erro 414 no nginx?
Aumente o buffer, por exemplo large_client_header_buffers 4 16k; no bloco http ou server. Melhor ainda é parar de mandar tantos dados na URL.
Um loop de redirecionamento pode causar 414?
Sim. A RFC 9110 cita isso como uma das causas típicas: um redirecionamento cujo destino contém a URL original cresce a cada salto até o servidor recusar.

Revisado em por Arielton Oberek.