Krijg je 400 Bad Request of ‘Request Header Or Cookie Too Large’? Meestal zitten er corrupte of te grote cookies of een fout adres achter. Hier vind je de stappen.
Een 400 Bad Request betekent dat de server de aanvraag van je browser of app heeft ontvangen, maar hem niet wil of kan verwerken omdat er iets mis mee is. De fout ligt dus bij wat er wordt verstuurd: niet bij de pagina zelf. De server zegt in feite: deze aanvraag klopt niet, stuur een andere.
Bij gewone bezoekers zijn de cookies van die ene website de meest voorkomende oorzaak. Elke aanvraag stuurt alle cookies van het domein mee in de header. Worden het er te veel of te grote, of raakt een cookie beschadigd, dan weigert de webserver de aanvraag. nginx toont dan 400 Bad Request met daaronder Request Header Or Cookie Too Large; Apache meldt Size of a request header field exceeds server limit. Andere oorzaken zijn een adres met ongeldige tekens (een losse %, een spatie of een half gekopieerde link), een verouderde cache, of een http-aanvraag naar een poort die alleen https verwacht.
Bij API’s en formulieren betekent 400 meestal dat de inhoud niet door de controle komt: ongeldige JSON, een ontbrekend verplicht veld of een verkeerde Content-Type-header. Een goede API zegt in de response erbij wát er fout is; die tekst is het eerste waar je naar kijkt.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Kijk of het adres in de adresbalk klopt. Een link uit een mail of chat is soms half gekopieerd, bevat een spatie of een losse %-teken, of heeft dubbele vraagtekens. Typ het adres opnieuw of ga naar de homepage van de site en navigeer van daaruit naar de pagina.
Open dezelfde pagina in een privé- of incognitovenster. Daar worden geen bestaande cookies en extensies gebruikt. Werkt het daar wel, dan weet je dat de oorzaak in je eigen browserprofiel zit en niet bij de website.
Je hoeft niet al je cookies te wissen. In recente versies van Chrome en Edge klik je op het pictogram links van de adresbalk en kies je de optie voor cookies en sitegegevens; daar verwijder je de gegevens van dit domein. Of open de ontwikkelaarstools (F12), ga naar het tabblad Application en klik onder Storage op Clear site data. Log daarna opnieuw in op de site.
Een oude, bewaarde versie kan verwijzen naar adressen die niet meer kloppen. Herlaad de pagina zonder cache met Ctrl + F5 (Windows) of Cmd + Shift + R (Mac). Helpt dat niet, zet browserextensies tijdelijk uit; sommige extensies voegen headers toe aan elke aanvraag.
Kijk in het foutenlog van de webserver wat er precies werd geweigerd. Bij nginx staan te lange headers op het logniveau info, dus ze kunnen ontbreken als je log op een hoger niveau staat. Met curl zie je de volledige statusregel en de response die de server teruggeeft.
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/apache2/error.log
curl -si https://www.voorbeeld.nl/pagina | head -n 20Komt ‘Request Header Or Cookie Too Large’ vaker voor, kijk dan eerst wélke cookies groot zijn. Vaak zijn het opgestapelde tracking- of A/B-testcookies, of een applicatie die sessiegegevens in een cookie bewaart in plaats van op de server. Dat oplossen is beter dan de limiet ophogen. Is een grotere header echt nodig, dan kun je de buffer verhogen.
# nginx (http- of server-blok)
large_client_header_buffers 4 16k;
# Apache (serverconfiguratie)
LimitRequestFieldSize 16380Geeft een API een 400, lees dan de body van de response: daar staat meestal welk veld ontbreekt of ongeldig is. Controleer of de JSON geldig is, of de Content-Type-header klopt en of getallen, datums en verplichte velden het juiste formaat hebben. Test met een minimale aanvraag en breid die stap voor stap uit.
curl -si -X POST https://api.voorbeeld.nl/v1/klanten \
-H 'Content-Type: application/json' \
-d '{"naam":"Test","email":"test@voorbeeld.nl"}'Zie je ‘The plain HTTP request was sent to HTTPS port’, dan komt er een gewone http-aanvraag binnen op een poort die TLS verwacht. Meestal is een link of proxy-instelling verkeerd (http://voorbeeld.nl:443), of mist ssl achter de listen-regel. Stuur http-verkeer via poort 80 door naar https in plaats van het op poort 443 te ontvangen.
server {
listen 443 ssl;
server_name www.voorbeeld.nl;
# ...
}Let op: Verhoog headerlimieten op de server niet blind. Grote headers kosten bij elke aanvraag geheugen en verbergen vaak een fout in de applicatie, zoals cookies die blijven groeien.
Alle 4xx-codes betekenen dat de server de fout bij de aanvrager legt. De code zegt wát er mis is:
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Meestal door een beschadigde of te grote cookie van die site. Verwijder de cookies van alleen dat domein of test in een privévenster.
Je browser stuurt meer cookie- of headergegevens mee dan de webserver accepteert. Cookies van die site verwijderen lost het voor jou op; de beheerder kan uitzoeken waarom ze zo groot worden.
Niet direct: de server vindt dat de aanvraag niet klopt. Maar als een website zelf te grote cookies zet of foute links maakt, moet de beheerder het wel oplossen.
Nee, dat is zelden nodig. Cookies en cache van de betreffende site wissen of een privévenster gebruiken is genoeg om de oorzaak te vinden.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · Gratis website-scan · Alle oplossingen