HTTP 414 URI Too Long: limiti URL

Cos'e HTTP 414 URI Too Long

Il codice HTTP 414 URI Too Long indica che l'URI inviato dal client supera la lunghezza massima accettata dal server. E un'errore tipico di applicazioni che generano URL dinamici con molti parametri in query string o di attacchi che tentano di bypassare validazioni con URI estremi.

Lunghezze tipiche dei server

SoftwareLimite default URI
Apache (LimitRequestLine)8190 byte
Nginx (large_client_header_buffers)8KB per buffer (4 buffer)
IIS4096 caratteri (configurabile fino a 16384)
Tomcat (maxHttpHeaderSize)8KB
Node.js (max-http-header-size)16KB (default da v14)

Lunghezze tipiche dei browser

  • Chrome: 32KB nell'URL bar, ma RFC raccomanda < 2048.
  • Firefox: 65KB.
  • Safari: 80KB.
  • Edge: 32KB (Chromium-based).
  • IE11: 2083 caratteri (limite storico).

Per compatibilità massima e SEO, mantieni URL sotto 2048 caratteri.

Cause comuni di 414

  • API GET con molti filtri concatenati in query string.
  • URL con base64 di immagini, token JWT, payload JSON.
  • Form HTML inviati come GET con dozzine di campi.
  • Tracking parameter aggiunti da campagne pubblicitarie.
  • Attacchi (URI bombing, buffer overflow attempt).

Configurazione Apache

LimitRequestLine 16384
LimitRequestFieldSize 16384

Da inserire nel virtual host. Massimo consigliato: 32KB. Oltre apre la porta a DoS amplification.

Configurazione Nginx

http {
    large_client_header_buffers 4 16k;
    client_header_buffer_size 16k;
}

Il primo numero (4) e quanti buffer; il secondo (16k) la dimensione di ciascuno. Il totale del header puo arrivare a 64KB.

Configurazione Node.js

node --max-http-header-size=32768 server.js
# oppure
const server = require('http').createServer({
    maxHeaderSize: 32768
}, requestHandler);

Soluzione: convertire GET in POST

La soluzione più robusta per richieste con molti parametri e usare POST con body JSON:

// Invece di:
GET /api/search?filters=a&filters=b&... (URL kilometrico)

// Usa:
POST /api/search
Content-Type: application/json

{
  "filters": ["a", "b", "c", ...],
  "sort": "date",
  "page": 1
}

Cookie e header lunghi

Il 414 puo essere causato anche da header molto grandi (non solo l'URL). Cookie di sessione enormi, header X-Forwarded-* in catene di proxy, JWT in Authorization possono saturare il buffer header.

Tracking e UTM excess

Le campagne marketing spesso aggiungono parametri UTM, fbclid, gclid, msclkid che gonfiano le URL. Best practice:

  • Spostare logica di tracking lato client tramite JavaScript.
  • Usare URL shortener per condividere link in canali con limiti (SMS, social).
  • Memorizzare l'intera campaign info in cookie o localStorage, mandando ID compatti via URL.

SEO impact

Google ha confermato di indicizzare URL fino a 2048 caratteri. Oltre, l'indicizzazione potrebbe essere parziale o omessa. URL più corti sono inoltre più cliccabili nelle SERP e nei social.

Sicurezza

Limiti generosi di URI possono essere sfruttati per:

  • DoS: invio massivo di URL enormi per saturare memoria.
  • Log injection: URL costruite per polluire log file.
  • WAF bypass: URL frammentate per evadere regole di pattern matching.

Mantieni i limiti ragionevoli (16-32KB max) e logga tentativi di URI molto lunghi come red flag.

Risposta del server

HTTP/1.1 414 URI Too Long
Content-Type: text/html

<html>
<head><title>414 Request-URI Too Long</title></head>
<body>
<h1>Request-URI Too Long</h1>
<p>The requested URL exceeds the server's maximum length.</p>
</body>
</html>

Diagnostica

curl -v "https://example.com/api/search?$(printf 'q=test&%.0s' {1..1000})"

Costruisce una URL artificialmente lunga per testare i limiti. Se ottieni 414, sai che il limite e attivo a qualche livello della catena.

Limiti GET e SEO

Google indicizza URL fino a 2048 caratteri. URL più lunghe possono essere truncate o non indicizzate. Per categorizzazione SEO, slug brevi e descrittivi sono preferiti: /blog/seo-2026 e meglio di /blog/categoria/?id=1234&name=seo-best-practices-2026&source=....

JWT in URL

Anti-pattern comune: passare JWT lunghi (1000+ caratteri) in query string per autenticazione magic-link. Risolvere con: short-lived token UUID memorizzato lato server, swap to JWT al primo touch. URL più corte, log più sicuri (no JWT esposto), revoca centralizzata.

Buffer overflow attacks

Server con buffer non protetto possono crashare ricevendo URI estremamente lunghe (es. milioni di caratteri). Protezione: limiti hard a livello di reverse proxy (es. Nginx 8KB) e WAF (Cloudflare, AWS WAF) prima ancora di toccare l'application server.

414 in PHP/Apache

PHP eredita i limiti di Apache. Se vedi 414 inspiegabili, controlla: LimitRequestLine in Apache, max_input_vars in PHP (default 1000 variabili), post_max_size per dati POST. Header eccessivi anche.

Mobile-first considerations

Le URL condivise via SMS o messaging app spesso vengono troncate. Mantenere URL pubbliche sotto 100 caratteri quando possibile. Per condivisione, usare URL shortener con il proprio dominio per branding.

Soluzioni per filtri estensivi

API di ricerca con filtri complessi spesso superano i limiti GET. Strategie:

  • POST con body JSON: standard per API moderne con filtri ricchi.
  • Encoded body: GET con singolo parametro q=base64(json). Trasforma molte chiavi in una singola.
  • Saved filters: utente salva preset, accede con singolo ID.

API GraphQL

GraphQL risolve elegantemente il problema: query complesse vanno nel body POST. Anche con GET, e una singola variabile query che, per quanto lunga, sta nei limiti normali.

Limiti CDN

Cloudflare ha limiti su URL ricevuti: 8KB per default. Configurazioni Enterprise possono alzare a 32KB. Oltre, il CDN risponde 414 prima ancora di toccare la tua origin. Verifica con curl diretto vs via CDN.

Logging tentativi sospetti

URL artificialmente lunghi sono spesso indicatori di attacchi. Configura logging accentuato per URL > 4KB, alert su pattern ricorrenti. Combinato con WAF, blocca prima di consumare resource.

Hai bisogno di aiuto?

Se il tuo sito mostra errori HTTP, il team di G Tech Group puo aiutarti. Contattaci tramite il modulo di contatto.

Hai trovato utile quest'articolo?