✦ Oplossingen · HTTP-foutcodes

405 Method Not Allowed: methode niet toegestaan

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.

Zo ziet de foutmelding eruit

  • 405 Method Not Allowed
  • 405 Not Allowed
  • The requested method POST is not allowed for this URL.
  • HTTP ERROR 405
  • Method Not Allowed

Waarom gebeurt dit?

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.

Zo herken je dit probleem

  • De pagina opent gewoon, maar bij versturen van het formulier volgt 405.
  • In de Network-tab van de ontwikkelaarstools zie je de mislukte aanvraag met methode POST, PUT of OPTIONS.
  • Bestaat het adres helemaal niet, dan krijg je 404; bij een verkeerd opgebouwde aanvraag 400.
  • Zie je in de browserconsole een CORS-melding, kijk dan ook bij CORS-fout: No Access-Control-Allow-Origin.

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. Bezoeker: herlaad en probeer opnieuw

    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.

  2. Kijk welke methode en welk adres er gebruikt wordt

    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)'
  3. Controleer de action van het formulier

    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.

  4. Zoek doorverwijzingen die POST in GET veranderen

    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)'
  5. Ontwikkelaar: controleer de route

    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.

  6. Ontwikkelaar: handel OPTIONS af bij CORS

    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.

  7. Beheerder: controleer webserver en firewall

    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'

405 of 501 Not Implemented?

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.

Wanneer schakel je hulp in?

  • Het contactformulier of de offerteaanvraag op je site werkt niet meer en je mist mogelijk aanvragen.
  • Een koppeling of app krijgt 405 op een API die volgens de documentatie gewoon zou moeten werken.
  • De fout begon na een verhuizing of na het aanzetten van https.
  • Je wilt CORS en methodes goed instellen zonder alles open te zetten.

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 405 Method Not Allowed?

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.

Waarom geeft mijn contactformulier 405?

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.

Wat is het verschil tussen 405 en 501?

Bij 405 kent de server de methode, maar niet voor dit adres. Bij 501 ondersteunt de server de methode helemaal niet.

Kan een CORS-probleem een 405 geven?

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.