✦ Oplossingen · HTTP-foutcodes

400 Bad Request: de server begrijpt je aanvraag niet

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.

Zo ziet de foutmelding eruit

  • 400 Bad Request
  • Request Header Or Cookie Too Large
  • Your browser sent a request that this server could not understand.
  • Size of a request header field exceeds server limit.
  • The plain HTTP request was sent to HTTPS port
  • HTTP ERROR 400

Waarom gebeurt dit?

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.

Zo herken je dit probleem

  • De fout verschijnt op één website, terwijl andere sites gewoon werken.
  • In een privévenster of andere browser werkt dezelfde pagina wél: dan zitten de oorzaak bijna altijd in cookies of cache.
  • Op de foutpagina staat ‘Request Header Or Cookie Too Large’: dat is specifiek een te grote cookie- of header-regel.
  • Krijg je de fout pas bij het uploaden van een groot bestand, dan is het waarschijnlijk 413 Request Entity Too Large.
  • Vraagt de site om in te loggen of zegt hij dat je geen toegang hebt, kijk dan bij 401 Unauthorized of 403 Forbidden.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Controleer het adres

    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.

  2. Test in een privévenster

    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.

  3. Verwijder de cookies van alleen deze site

    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.

  4. Leeg de cache en herlaad de pagina

    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.

  5. Beheerder: lees de foutenlog en de 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 20
  6. Beheerder: zoek waarom de cookies zo groot worden

    Komt ‘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 16380
  7. Ontwikkelaar: controleer wat de API verwacht

    Geeft 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"}'
  8. Beheerder: http naar een https-poort

    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.

400 vergeleken met andere 4xx-fouten

Alle 4xx-codes betekenen dat de server de fout bij de aanvrager legt. De code zegt wát er mis is:

  • 400 Bad Request: de aanvraag zelf is ongeldig (opmaak, header, cookie, inhoud).
  • 401 Unauthorized: je bent niet (goed) ingelogd.
  • 403 Forbidden: je bent bekend, maar hebt geen toegang.
  • 413: de inhoud, zoals een upload, is te groot.
  • 431 Request Header Fields Too Large: de officiële code voor te grote headers; nginx gebruikt hier in de praktijk 400.

Wanneer schakel je hulp in?

  • De fout blijft terugkomen bij meerdere bezoekers, ook na het wissen van cookies.
  • Je eigen website of webshop geeft 400 bij het afrekenen, inloggen of versturen van een formulier.
  • Je wilt headerlimieten of serverconfiguratie aanpassen, maar weet niet welke instelling waar staat.
  • Een koppeling of API geeft 400 en de foutmelding in de response helpt je niet verder.

Lukt het niet? Wij helpen

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.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

Waarom krijg ik 400 Bad Request op één website?

Meestal door een beschadigde of te grote cookie van die site. Verwijder de cookies van alleen dat domein of test in een privévenster.

Wat betekent ‘Request Header Or Cookie Too Large’?

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.

Is een 400-fout een probleem van de server?

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.

Helpt het om de browser opnieuw te installeren?

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.