Getting started General
Components
Forms
Trends
Utilities
Migrate from v1
  Join us
  http Articles

Qu’est-ce que le 405 Method Not Allowed : guide complet pour corriger les erreurs HTTP 405

HTTP

Découvrez ce qui provoque l’erreur HTTP 405 Method Not Allowed et comment la corriger. Comprenez les restrictions de méthode, les configurations serveur et le dépannage d’API avec des solutions pratiques.

Erreur HTTP 405 Method Not Allowed
Erreur HTTP 405 Method Not Allowed

L’erreur HTTP 405 Method Not Allowed se produit lorsqu’un serveur web comprend votre requête mais refuse d’autoriser cette méthode HTTP spécifique pour la ressource que vous tentez d’accéder. Contrairement à une erreur 404 où le serveur ne reconnaît pas la ressource, une erreur 405 signifie que le serveur sait ce que vous voulez faire, mais ne vous laisse pas utiliser cette méthode particulière pour y accéder.

Cette erreur est fréquente lorsque l’on travaille avec des API REST, des applications web et des configurations serveur. Le serveur inclut généralement un en-tête Allow dans la réponse qui liste les méthodes HTTP réellement autorisées pour cette ressource, ce qui vous aide à comprendre ce qui n’a pas fonctionné et comment le corriger.

Qu’est-ce que l’erreur 405 Method Not Allowed ?

405 Method Not Allowed est un code de statut HTTP qui indique que le serveur reconnaît la méthode HTTP que vous utilisez, mais que la ressource concernée ne la prend pas en charge. Les méthodes HTTP définissent l’action que vous souhaitez effectuer : GET récupère des données, POST crée de nouvelles ressources, PUT met à jour des ressources existantes et DELETE en supprime.

Lorsque vous envoyez une requête avec une méthode qui n’est pas autorisée pour cet endpoint, le serveur répond avec un code 405. Par exemple, si vous essayez d’envoyer une requête DELETE vers un endpoint qui accepte uniquement GET et POST, vous recevrez une erreur 405 avec un en-tête Allow indiquant les méthodes autorisées.

POST /api/data HTTP/1.1
Host: example.com
Content-Type: application/json

{"key": "value"}

// Réponse du serveur :
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Content-Type: text/html

RFC 9110 : 405 Method Not Allowed et l’obligation de l’en-tête Allow

Le comportement du code de statut 405 et de l’en-tête Allow est défini dans la RFC 9110 (HTTP Semantics). Selon cette spécification, le code 405 (Method Not Allowed) indique que la méthode reçue dans la ligne de requête est connue par le serveur d’origine mais non prise en charge par la ressource cible. Surtout, le serveur d’origine DOIT générer un champ d’en-tête Allow dans une réponse 405 contenant la liste des méthodes actuellement prises en charge par la ressource cible.

Ainsi, lorsque vous recevez une 405, le serveur ne vous dit pas seulement que votre méthode est incorrecte : il est obligé par la norme de vous indiquer quelles méthodes sont valables. C’est cette liste qu’il faut utiliser pour corriger votre requête. L’en-tête Allow sert uniquement à informer le destinataire des méthodes de requête valides ; les proxys ne doivent pas le modifier. Une valeur Allow vide est autorisée et indique que la ressource n’autorise actuellement aucune méthode (par exemple, si elle a été temporairement désactivée par configuration). La RFC 9110 indique également que les réponses 405 sont heuristiquement cacheables sauf si d’autres contrôles de cache s’appliquent.

Causes fréquentes des erreurs 405

Mauvaise méthode HTTP

La cause la plus fréquente est l’utilisation d’une mauvaise méthode HTTP pour un endpoint. Les API REST sont strictes sur les méthodes que chaque endpoint accepte. Par exemple, un endpoint en lecture seule peut n’accepter que des requêtes GET, tandis qu’un endpoint de création peut n’accepter que POST.

// Mauvais : essayer de supprimer un endpoint en lecture seule
fetch('/api/users', {
  method: 'DELETE'
});
// Renvoie : 405 Method Not Allowed
// Allow: GET, POST

// Correct : utiliser la bonne méthode
fetch('/api/users', {
  method: 'GET'
});

Restrictions de configuration serveur

Les serveurs web comme Apache et Nginx peuvent être configurés pour restreindre certaines méthodes HTTP pour des raisons de sécurité. Ces restrictions peuvent bloquer des méthodes comme DELETE ou PUT même si votre code d’application les prend en charge.

Dans Apache, vous pouvez voir ces restrictions dans les fichiers .htaccess ou httpd.conf. Nginx utilise les directives limit_except dans ses fichiers de configuration.

Règles des endpoints d’API

Les API appliquent des règles strictes sur les méthodes acceptées par chaque endpoint. Si vous travaillez avec une API tierce ou si vous construisez la vôtre, l’endpoint peut être conçu pour n’accepter que certaines méthodes. Envoyer une requête GET vers un endpoint qui n’accepte que POST entraînera une erreur 405.

Problèmes de routage du framework

Les frameworks web comme Express.js, Flask ou Django vous demandent de définir des routes pour chaque méthode HTTP. Si vous ne définissez qu’un gestionnaire GET pour une route mais que vous envoyez une requête POST, le framework renverra une erreur 405 parce qu’aucun gestionnaire POST n’existe.

Filtres de sécurité et WAF

Les pare-feu applicatifs web et les filtres de sécurité peuvent bloquer certaines méthodes HTTP pour empêcher des attaques. Des méthodes comme TRACE ou OPTIONS sont parfois bloquées par défaut, ce qui peut provoquer des erreurs 405 même si votre application les accepterait normalement.

Comment corriger les erreurs 405 Method Not Allowed

Valider la méthode HTTP

Commencez par vérifier si vous utilisez la bonne méthode HTTP pour l’endpoint. Consultez la documentation de l’API ou utilisez une requête OPTIONS pour découvrir quelles méthodes sont autorisées.

# Vérifier les méthodes autorisées avec une requête OPTIONS
curl -X OPTIONS https://api.example.com/users -i

# La réponse inclura l'en-tête Allow :
# Allow: GET, POST, PUT

Si vous recevez une erreur 405 avec un en-tête Allow, adaptez votre requête pour utiliser l’une des méthodes autorisées listées dans cet en-tête.

Vérifier la configuration du serveur

Pour les serveurs Apache, vérifiez vos fichiers .htaccess ou httpd.conf à la recherche de restrictions de méthode.

# Apache : autoriser des méthodes spécifiques

    Order Allow,Deny
    Allow from all


# Si vous avez besoin de DELETE, ajoutez-la :

    Order Allow,Deny
    Allow from all

Pour Nginx, vérifiez votre fichier nginx.conf à la recherche de directives limit_except.

# Nginx : autoriser des méthodes spécifiques
location /api {
    limit_except GET POST {
        deny all;
    }
}

# Pour autoriser DELETE, mettez à jour la configuration :
location /api {
    limit_except GET POST DELETE {
        deny all;
    }
}

Après avoir modifié les fichiers de configuration du serveur, redémarrez votre serveur web pour que les changements prennent effet.

Corriger le routage du framework

Dans les frameworks web, assurez-vous d’avoir défini des gestionnaires de route pour toutes les méthodes HTTP que vous souhaitez prendre en charge. Voici un exemple avec Express.js :

// Express.js : définir toutes les méthodes nécessaires
app.get('/posts', (req, res) => {
  res.json(posts);
});

app.post('/posts', (req, res) => {
  const newPost = createPost(req.body);
  res.status(201).json(newPost);
});

// Si vous essayez DELETE sans gestionnaire, vous obtiendrez une 405
app.delete('/posts/:id', (req, res) => {
  deletePost(req.params.id);
  res.status(204).send();
});

Vérifier la documentation de l’endpoint d’API

Relisez la documentation de l’API pour confirmer quelles méthodes chaque endpoint accepte. Beaucoup d’API fournissent une documentation claire sur les méthodes prises en charge, ou vous pouvez utiliser des requêtes OPTIONS pour interroger directement le serveur.

// Utiliser OPTIONS pour découvrir les méthodes autorisées
fetch('/api/users', {
  method: 'OPTIONS'
})
.then(response => {
  const allowedMethods = response.headers.get('Allow');
  console.log('Allowed methods:', allowedMethods);
});

Vérifier les filtres de sécurité

Si vous utilisez un pare-feu applicatif web ou des filtres de sécurité, vérifiez leur configuration pour vous assurer qu’ils ne bloquent pas des méthodes HTTP légitimes. Certains WAF bloquent par défaut des méthodes comme TRACE ou OPTIONS, mais vous devrez peut-être autoriser DELETE ou PUT pour que votre application fonctionne correctement.

Vérifier l’authentification et les permissions

Parfois, ce qui ressemble à une erreur 405 peut en réalité être un problème de permissions. Certaines API restreignent certaines méthodes aux utilisateurs authentifiés ou à des rôles spécifiques. Assurez-vous d’inclure les bons en-têtes d’authentification dans vos requêtes.

// Inclure les en-têtes d'authentification
fetch('/api/posts/1', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
  }
});

Examiner les journaux du serveur

Les journaux du serveur peuvent fournir des informations précieuses sur la raison pour laquelle une erreur 405 se produit. Consultez les journaux d’erreur de votre serveur web pour trouver des messages concernant les restrictions de méthode.

Les journaux Apache affichent généralement des messages comme « Method PUT not allowed for /api/data » dans le journal d’erreur. Les journaux Nginx peuvent afficher des erreurs « method not allowed ». Ces journaux vous aident à déterminer si le problème vient de la configuration du serveur, du code de l’application ou des règles de l’endpoint API.

Exemples concrets

Exemple 1 : endpoint d’API REST

Imaginez que vous avez une API REST avec un endpoint /posts qui ne prend en charge que les méthodes GET et POST. Si vous essayez d’envoyer une requête DELETE vers cet endpoint, vous recevrez une erreur 405.

// Ceci renverra une erreur 405 Method Not Allowed
fetch('/posts', {
  method: 'DELETE'
});

// Correct : utiliser GET pour récupérer les posts
fetch('/posts', {
  method: 'GET'
});

// Ou POST pour créer un nouveau post
fetch('/posts', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ title: 'New Post', content: 'Post content' })
});

Exemple 2 : gestionnaire de route Express.js

Dans Express.js, si vous ne définissez qu’un gestionnaire GET pour une route mais que vous essayez d’envoyer une requête POST, vous obtiendrez une erreur 405 parce qu’aucun gestionnaire POST n’existe.

// Seul GET est défini
app.get('/items', (req, res) => {
  res.json(items);
});

// Cette requête POST renverra une 405
// POST /items -> 405 Method Not Allowed

// Correction : ajouter un gestionnaire POST
app.post('/items', (req, res) => {
  const newItem = createItem(req.body);
  res.status(201).json(newItem);
});

Exemple 3 : problème de configuration serveur

Si votre serveur Apache est configuré pour n’autoriser que les méthodes GET et POST, toute requête PUT ou DELETE renverra des erreurs 405 même si votre code d’application les prend en charge.

# Configuration actuelle (restrictive)

    Order Allow,Deny
    Allow from all


# Les requêtes PUT et DELETE renverront une 405

# Configuration mise à jour (autorise PUT et DELETE)

    Order Allow,Deny
    Allow from all

Tests et débogage

Lorsque vous déboguez des erreurs 405, utilisez des outils comme curl ou Postman pour tester différentes méthodes HTTP et voir lesquelles sont réellement autorisées. L’en-tête Allow renvoyé par le serveur dans la réponse 405 vous indique précisément quelles méthodes vous pouvez utiliser.

# Tester différentes méthodes
curl -X GET https://api.example.com/data -i
curl -X POST https://api.example.com/data -i
curl -X PUT https://api.example.com/data -i
curl -X DELETE https://api.example.com/data -i

# Vérifier les méthodes autorisées
curl -X OPTIONS https://api.example.com/data -i

La méthode OPTIONS est particulièrement utile parce qu’elle renvoie l’en-tête Allow sans exécuter l’action, ce qui la rend sûre pour la découverte.

Bonnes pratiques de prévention

  • Consultez la documentation de l’API : vérifiez toujours quelles méthodes HTTP chaque endpoint prend en charge avant d’envoyer des requêtes
  • Utilisez des requêtes OPTIONS : interrogez les endpoints avec OPTIONS pour découvrir programmétiquement les méthodes autorisées
  • Définissez tous les gestionnaires de route : dans votre framework, assurez-vous d’avoir créé des gestionnaires pour toutes les méthodes que vous souhaitez prendre en charge
  • Testez la configuration du serveur : vérifiez que la configuration de votre serveur web autorise les méthodes dont votre application a besoin
  • Vérifiez les filtres de sécurité : assurez-vous que les WAF et filtres de sécurité ne bloquent pas des méthodes légitimes
  • Incluez les bons en-têtes : certaines API exigent une authentification ou des en-têtes spécifiques pour certaines méthodes
  • Surveillez les journaux du serveur : consultez régulièrement les logs pour détecter tôt les problèmes de restrictions de méthode

Résumé

L’erreur HTTP 405 Method Not Allowed se produit lorsque vous utilisez une méthode HTTP que le serveur reconnaît mais n’autorise pas pour la ressource spécifique. Les causes courantes incluent l’utilisation d’une mauvaise méthode pour un endpoint, des restrictions de configuration serveur, des gestionnaires de route manquants dans les frameworks et des filtres de sécurité qui bloquent des méthodes.

Pour corriger les erreurs 405, vérifiez que vous utilisez la bonne méthode HTTP, contrôlez les configurations serveur pour les restrictions de méthode, assurez-vous que les routes de votre framework prennent en charge les méthodes dont vous avez besoin, consultez la documentation de l’API et examinez les journaux du serveur pour des informations d’erreur détaillées. L’en-tête Allow dans la réponse 405 fournit des indices précieux sur les méthodes réellement autorisées.

En comprenant le fonctionnement des méthodes HTTP et en suivant les bonnes pratiques de conception d’API et de configuration serveur, vous pouvez prévenir la plupart des erreurs 405 et les résoudre rapidement lorsqu’elles se produisent. Testez toujours vos endpoints avec différentes méthodes et utilisez des requêtes OPTIONS pour découvrir ce qui est réellement autorisé avant d’implémenter la logique de votre application.

Commencez à créer avec Axentix

Prêt à créer des sites web exceptionnels ? Commencez avec le framework Axentix dès aujourd'hui.

Commencer

Articles similaires