HTTP 405 Method Not Allowed

Bonne adresse, mauvais verbe : la ressource existe mais n'accepte pas cette méthode HTTP.

Ce que signifie HTTP 405

HTTP 405 Method Not Allowed signifie que le serveur reconnaît l'URL mais que la méthode HTTP — GET, POST, PUT, DELETE — n'est pas prise en charge pour celle-ci. La réponse doit inclure un en-tête Allow listant les méthodes prises en charge.

C'est presque toujours un décalage entre le client et l'API : un formulaire faisant un POST vers une route de page, un script envoyant PUT là où l'API attend PATCH, ou un webhook configuré avec la mauvaise méthode.

Causes courantes des erreurs 405

  • POST envoyé à un endpoint qui ne gère que GET (ou l'inverse) — typique après avoir copié-collé des exemples d'API.
  • Une redirection (301/302) a converti un POST en GET avant que la requête n'atteigne l'endpoint.
  • Le serveur web bloque globalement des méthodes comme PUT/DELETE alors que l'application les attend.
  • Une mauvaise route : l'endpoint visé est /api/items (POST), mais la requête a atteint /items.

Comment la corriger en tant que développeur

  • Lisez l'en-tête de réponse Allow — il liste exactement les méthodes acceptées par l'URL.
  • Vérifiez la documentation de l'API pour la paire méthode/chemin correcte.
  • Si une redirection se trouve sur le chemin, utilisez 307/308 pour que la méthode survive au saut.
  • Côté serveur, assurez-vous que la route du framework déclare la méthode et qu'aucun proxy ne la retire.

Exemple de réponse

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Content-Type: application/json

{"error":"method_not_allowed"}

FAQ

Comment voir quelles méthodes une URL prend en charge ?

Vérifiez l'en-tête Allow de la réponse 405, ou envoyez une requête OPTIONS à l'URL.

Pourquoi mon POST s'est-il transformé en GET ?

Une redirection 301 ou 302 entre les deux a laissé le client changer de méthode. Utilisez des redirections 307/308 pour les endpoints acceptant POST.

405 est-il un problème client ou serveur ?

Formellement une erreur client, mais elle expose souvent une mauvaise configuration serveur — une route sans méthode déclarée ou un proxy bloquant des verbes.