501 Not Implemented
Utilisation
Le code de statut 501 Not Implemented signifie que le serveur est incapable de satisfaire la requête en raison d’une lacune de son côté. Cela ressemble au code de statut 405 Method Not Allowed, à ceci près qu’un 405 indique précisément que la méthode demandée est reconnue mais non autorisée pour la ressource cible.
Un code de statut 405 Method Not Allowed signifie que le serveur reconnaît la méthode mais ne l’autorise pas pour la ressource cible. Un code de statut 501 Not Implemented signifie que le serveur ne reconnaît pas la méthode, ou n’est pas en mesure de la prendre en charge pour quelque ressource que ce soit. Il s’agit d’une condition permanente, au niveau du serveur.
Ce statut est approprié lorsque le serveur ne reconnaît pas la méthode de la requête et se trouve donc dans l’incapacité de prendre en charge cette requête pour quelque ressource que ce soit.
Impact SEO
Les moteurs de recherche comme Google n’indexent pas une URL renvoyant un statut 501 Not Implemented. Les URL précédemment indexées qui renvoient ce code de statut sont retirées des résultats de recherche.
Certaines API étendent la signification de 501 au-delà des méthodes manquantes. L’API Shopify renvoie 501 Not Implemented lorsque le point de terminaison demandé n’est pas disponible dans la formule souscrite par la boutique, par exemple pour une fonctionnalité réservée à Shopify Plus. Le point de terminaison existe bien dans l’API, mais son accès dépend du niveau d’abonnement.
Exemple
Le client demande une ressource et le serveur répond par un code de statut 501 Not Implemented, car la méthode de la requête est reconnue mais pas encore prise en charge.
Requête
POST /requests?id=111&flag=start HTTP/1.1
Host: example.com
Réponse
HTTP/1.1 501 Not Implemented
Content-Type: text/html; charset=UTF-8
Content-Length: 148
<html>
<head>
<title>Function Not Implemented</title>
</head>
<body>
<p>This functionality is under development.</p>
</body>
</html>
Comment corriger
Vérifiez que la méthode HTTP employée dans la requête est correcte. Un PATCH envoyé à un serveur qui n’attend que GET et POST déclenche un 501 si le serveur ne dispose d’aucun gestionnaire pour cette méthode.
Causes profondes courantes et correctifs associés :
Méthode non prise en charge par le serveur. Sous Apache, les directives Limit et LimitExcept contrôlent les méthodes autorisées. Sous nginx, le filtrage des méthodes s’effectue dans le bloc location. Assurez-vous que la méthode envoyée par le client n’est pas exclue par la configuration.
Modules serveur manquants. Apache requiert mod_dav pour les méthodes WebDAV telles que PROPFIND et MKCOL. IIS requiert WebDAV Publishing ainsi que les mappages de gestionnaires adéquats. Activez le module et redémarrez le service.
Proxy inverse qui supprime ou réécrit les méthodes. Certains proxies convertissent les méthodes non standard en GET. Sous nginx, vérifiez que proxy_method n’est pas défini, sauf intention contraire. Sur AWS ALB, confirmez que le groupe cible prend en charge les méthodes HTTP requises.
Logiciel serveur obsolète. Les anciennes versions de serveurs web ne gèrent pas les méthodes normalisées après leur publication. Mettez à jour Apache, nginx ou IIS vers une version stable actuelle.
Blocage par un pare-feu ou un WAF. Les pare-feux applicatifs web et les extensions de sécurité rejettent parfois des méthodes telles que PUT, DELETE ou OPTIONS. Examinez les règles du WAF et autorisez explicitement les méthodes nécessaires pour le point de terminaison.
Fonctionnalité d’API restreinte par le niveau d’abonnement. Des plateformes comme Shopify renvoient 501 lorsqu’un point de terminaison existe mais n’est pas disponible pour le niveau d’abonnement de la boutique. Vérifiez les prérequis de formule pour la fonctionnalité dans la documentation de l’API et passez à une formule supérieure si nécessaire.
Côté client, vérifiez que l’URL de la requête est correcte. Une coquille qui achemine le trafic vers le mauvais serveur ou le mauvais point de terminaison provoque un 501 lorsque le serveur destinataire n’implémente pas la méthode.
Références de code
.NET
HttpStatusCode.NotImplemented
Rust
http::StatusCode::NOT_IMPLEMENTED
Rails
:not_implemented
Go
http.StatusNotImplemented
Symfony
Response::HTTP_NOT_IMPLEMENTED
Python3.5+
http.HTTPStatus.NOT_IMPLEMENTED
Java
java.net.HttpURLConnection.HTTP_NOT_IMPLEMENTED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NOT_IMPLEMENTED
Angular
@angular/common/http/HttpStatusCode.NotImplemented