Geeft een formulier of API 405 Method Not Allowed? Het adres bestaat, maar accepteert deze methode (zoals POST) niet. Zo vind je de oorzaak en los je het stap voor stap op.
Elke HTTP-aanvraag heeft een methode: GET om iets op te halen, POST om iets te versturen, en bij API’s ook PUT, PATCH, DELETE en OPTIONS. Een 405 Method Not Allowed betekent: dit adres bestaat wel, maar deze methode is hier niet toegestaan. De server hoort er een Allow-header bij te sturen met de methodes die wél werken.
Op websites ontstaat 405 vaak bij een formulier dat naar een statisch bestand post, zoals een .html-pagina. nginx serveert zulke bestanden alleen met GET en HEAD en antwoordt op een POST met 405 Not Allowed. Ook komt het voor dat een formulier naar het verkeerde adres verwijst, of dat een doorverwijzing (bijvoorbeeld van http naar https of naar een adres met slash) van een POST onderweg een GET maakt.
Bij API’s en frameworks betekent 405 dat de route bestaat, maar alleen voor andere methodes is vastgelegd. Een veelvoorkomend geval is een OPTIONS-aanvraag die de browser vooraf stuurt bij aanvragen naar een ander domein (CORS-preflight) en die de server niet afhandelt.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Ga terug naar het formulier, herlaad de pagina en verstuur het opnieuw. Werkt het nog niet, gebruik dan een ander contactkanaal van de site. Als bezoeker kun je deze fout verder niet zelf oplossen; meld hem bij de eigenaar.
Open de ontwikkelaarstools (F12), tab Network, en verstuur het formulier opnieuw. Klik op de aanvraag met status 405: je ziet de methode, het adres en de headers van het antwoord, waaronder Allow. Met curl doe je hetzelfde vanaf de opdrachtregel.
curl -si -X POST https://www.voorbeeld.nl/contact/ -d 'naam=test' | head -n 15
curl -si -X OPTIONS https://www.voorbeeld.nl/contact/ | grep -i -E '^(HTTP|allow)'Verwijst het formulier naar een .html-bestand of naar een pagina die geen formulieren verwerkt, zet de action dan op het script of de route die de gegevens werkelijk afhandelt. Een statisch bestand kan geen POST verwerken; daar is altijd een script of dienst voor nodig.
Browsers maken van een POST een GET als ze een 301- of 302-doorverwijzing volgen. Post je naar http:// of naar een adres zonder slash, dan komt er bij het doel een GET aan, en die route accepteert vaak alleen POST. Post daarom direct naar het definitieve adres. Bij API’s behouden 307 en 308 de methode wel.
curl -si -X POST http://voorbeeld.nl/api/aanmelden | grep -i -E '^(HTTP|location)'In frameworks leg je per route vast welke methodes zijn toegestaan. Controleer of de route voor POST (of PUT/DELETE) is geregistreerd en of de aanroep exact hetzelfde pad gebruikt. Let ook op formulieren die PUT of DELETE simuleren via een verborgen veld: ontbreekt dat veld, dan komt er een gewone POST binnen.
Doet de browser een preflight met OPTIONS en antwoordt de server met 405, dan wordt de echte aanvraag nooit verstuurd. Zorg dat de server OPTIONS op die route beantwoordt met de juiste Access-Control-Allow-*-headers.
Zoek in de configuratie naar regels die methodes beperken. Let op: bij nginx geeft limit_except met deny all een 403, niet een 405. Een 405 van nginx komt meestal doordat de aanvraag als statisch bestand werd behandeld en niet bij PHP of de applicatie aankwam. Ook een WAF kan methodes als PUT en DELETE weigeren.
sudo nginx -T | grep -n -E 'limit_except|location|try_files'Bij 405 kent de server de methode wel, maar staat hij haar op dit adres niet toe. Bij 501 Not Implemented ondersteunt de server de methode helemaal niet, op geen enkel adres. Een 501 zie je vooral bij ongebruikelijke of zelfbedachte methodes, of bij een eenvoudige server of proxy die alleen de basis kent.
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.
Het adres bestaat, maar de server accepteert de gebruikte methode hier niet, bijvoorbeeld een POST naar een pagina die alleen GET toestaat. In de Allow-header staat welke methodes wel mogen.
Meestal verstuurt het formulier naar een statisch bestand of een verkeerd adres, of verandert een doorverwijzing de POST in een GET. Laat het formulier direct naar het verwerkende script op het definitieve https-adres posten.
Bij 405 kent de server de methode, maar niet voor dit adres. Bij 501 ondersteunt de server de methode helemaal niet.
Ja. Als de server de OPTIONS-preflight van de browser niet afhandelt, antwoordt hij vaak met 405 en verstuurt de browser de echte aanvraag niet.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · WordPress-support · Alle oplossingen