✦ Oplossingen · HTTP-foutcodes

413 Request Entity Too Large: upload te groot voor de server

Krijg je 413 Request Entity Too Large bij uploaden? De webserver weigert de grootte. Zo pas je client_max_body_size, LimitRequestBody en de PHP-uploadlimieten aan.

Zo ziet de foutmelding eruit

  • 413 Request Entity Too Large
  • Request Entity Too Large
  • 413 Content Too Large
  • HTTP ERROR 413
  • client intended to send too large body

Waarom gebeurt dit?

Een 413 betekent dat de inhoud van de aanvraag groter is dan de server wil aannemen. Bijna altijd gaat het om een upload: een foto, video, pdf, back-up of import die via een formulier of beheeromgeving wordt verstuurd. In de huidige HTTP-standaard heet de code 413 Content Too Large; veel servers tonen nog de oude naam Request Entity Too Large.

De weigering komt meestal van de webserver, nog vóórdat PHP of de applicatie het bestand ziet. nginx staat standaard maar een kleine hoeveelheid toe via client_max_body_size; Apache heeft LimitRequestBody. Zit er een proxy, load balancer of CDN vóór de server, dan heeft die vaak een eigen maximum. De kleinste limiet in de keten bepaalt wat er door kan.

Daarachter heeft PHP nog eigen grenzen: upload_max_filesize en post_max_size. Wordt een daarvan overschreden, dan krijg je meestal géén 413 maar een melding van de applicatie, of een formulier dat leeg lijkt aan te komen. Dat behandelen we op upload_max_filesize en post_max_size.

Zo herken je dit probleem

  • De fout komt alleen bij grote bestanden; kleine uploads werken wel.
  • Op de foutpagina staat ‘413 Request Entity Too Large’ met eronder de naam van de webserver, zoals nginx.
  • Zegt de applicatie dat het bestand groter is dan upload_max_filesize, dan gaat het om de PHP-limiet: zie deze pagina.
  • Is niet de inhoud maar een cookie of header te groot, dan krijg je 400 Bad Request. Bij een te grote e-mail is het 552 bericht te groot.

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. Gebruiker: verklein het bestand

    Comprimeer foto’s of video’s, sla een pdf op met een lagere kwaliteit of splits het in delen. Lukt de upload dan wel, dan weet je dat het puur om de grootte gaat. Vraag de beheerder van de site wat het maximum is als je vaak grote bestanden moet aanleveren.

  2. Beheerder: stel vast welke laag weigert

    Kijk in het foutenlog van nginx: daar staat client intended to send too large body met het aantal bytes. Staat er niets in het log van je webserver, dan komt de 413 van een laag ervoor, zoals een proxy, load balancer of CDN.

    sudo grep 'too large body' /var/log/nginx/error.log | tail -n 5
  3. Beheerder: verhoog client_max_body_size in nginx

    Zet client_max_body_size in het http-, server- of locationblok. Een waarde in een locationblok gaat vóór de algemene waarde, dus controleer of er geen kleinere instelling dieper in de configuratie staat. Kies een maximum dat past bij wat gebruikers echt uploaden. Test de configuratie en herlaad nginx.

    # bijvoorbeeld in het server-blok
    client_max_body_size 64m;
    
    sudo nginx -t && sudo systemctl reload nginx
  4. Beheerder: controleer LimitRequestBody in Apache

    In Apache bepaalt LimitRequestBody het maximum, in bytes. Die kan in de serverconfiguratie, een vhost, een Directory-blok of .htaccess staan. Zoek waar hij is ingesteld en verhoog hem waar nodig. In recente Apache-versies is er ook zonder eigen instelling een standaardgrens.

    # 64 MB in bytes
    LimitRequestBody 67108864
    
    sudo apachectl configtest && sudo systemctl reload apache2
  5. Beheerder: zet de PHP-limieten op dezelfde hoogte

    Is de webserver aangepast, controleer dan of PHP het ook toelaat. post_max_size moet minstens zo groot zijn als upload_max_filesize, want het hele formulier telt mee. Hoe en waar je dat instelt, staat op upload_max_filesize en post_max_size.

    php -i | grep -E 'upload_max_filesize|post_max_size'
  6. Beheerder: controleer proxy’s en CDN

    Draait er een tweede nginx als reverse proxy vóór de applicatie, dan heeft elke nginx een eigen client_max_body_size. Ook een CDN of load balancer heeft een maximum per aanvraag; bij Cloudflare hangt dat af van het abonnement. Moet er meer door, laat grote uploads dan rechtstreeks naar de server of naar opslag gaan.

  7. Ontwikkelaar: kies een betere uploadroute voor grote bestanden

    Voor heel grote bestanden is één grote aanvraag kwetsbaar: een kleine hapering laat alles mislukken, en limieten in de keten zijn lastig te beheren. Upload in delen (chunked upload) of laat de browser rechtstreeks naar opslag uploaden. Controleer de grootte ook vooraf in de browser, zodat de gebruiker direct een duidelijke melding krijgt.

Let op: Zet limieten niet onbeperkt hoog. Een te ruime limiet maakt het makkelijker om de server met enorme aanvragen te belasten; stem het maximum af op wat je gebruikers werkelijk nodig hebben.

Wanneer schakel je hulp in?

  • Klanten kunnen geen foto’s of documenten meer aanleveren via je website.
  • Je hebt de limiet verhoogd, maar de 413 blijft en je vindt niet welke laag weigert.
  • Imports of back-ups in je beheeromgeving lopen vast op de grootte.
  • Je wilt grote uploads mogelijk maken zonder de server kwetsbaar te maken.

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

Wat betekent 413 Request Entity Too Large?

Het bestand of formulier dat je verstuurt is groter dan de server toestaat. Meestal is het de limiet van de webserver, zoals client_max_body_size in nginx.

Ik heb upload_max_filesize verhoogd, maar krijg nog steeds 413.

Dan weigert de webserver het al vóór PHP. Verhoog ook client_max_body_size (nginx) of LimitRequestBody (Apache), en controleer een eventuele proxy of CDN ervoor.

Waar zet ik client_max_body_size?

In het http-, server- of locationblok van nginx. De meest specifieke instelling geldt, dus een kleinere waarde in een locationblok gaat vóór een grotere in het server-blok.

Is 413 Content Too Large iets anders?

Nee, dat is de nieuwere naam voor dezelfde statuscode 413 in de HTTP-standaard.