Come appare il messaggio
400 Bad Request – Request Header Or Cookie Too LargeCause frequenti
- Tanti cookie sullo stesso dominio, ad es. analytics, A/B test e più app su sottodomini.
- Cookie di sessione SSO/OIDC o bearer token con molti claim di gruppo.
- Loop di redirect che imposta un nuovo cookie a ogni passaggio.
large_client_header_bufferstroppo piccolo per l'applicazione.- Anche il backend (Node, Tomcat, Gunicorn) ha i suoi limiti sugli header.
Verifica
- Mostra le dimensioni attuali dei buffer nella config
nginx -T 2>/dev/null | grep -nE 'large_client_header_buffers|client_header_buffer_size' - Prova con un cookie da 12 KB se nginx risponde 400
curl -sS -o /dev/null -w '%{http_code}\n' -H "Cookie: test=$(head -c 12000 /dev/zero | tr '\0' a)" https://example.com/ - Cerca le voci corrispondenti nell'error.log
grep -i 'too large' /var/log/nginx/error.log | tail -n 5
Soluzione
- Per l'utente: cancella i cookie del dominio, così confermi subito la causa.
- Nel blocco server imposta
large_client_header_buffers 4 32k;ed eseguinginx -t && systemctl reload nginx. - Con SSO limita i gruppi nel token o recuperali dall'endpoint userinfo.
- Limita i cookie al dominio e al percorso necessari invece di
.example.com. - Alza i limiti degli header anche sul backend, altrimenti lì arriva un 431 o 400.
Domande frequenti
Quanto grandi posso fare i buffer?
32k per buffer basta quasi sempre. Valori molto più alti costano memoria per connessione e facilitano abusi. Meglio ridurre la causa, cioè il cookie grande.
Perché colpisce solo alcuni utenti?
Perché solo il loro browser ha accumulato così tanti cookie, ad es. per molte app o un vecchio loop. Una finestra privata lo conferma subito.