501 Not Implemented
Verwendung
Der Statuscode 501 Not Implemented bedeutet, dass der Server die Anfrage aufgrund eines serverseitigen Mangels nicht erfüllen kann. Dies ähnelt dem Statuscode 405 Method Not Allowed, wobei ein 405 speziell bedeutet, dass die angeforderte Methode zwar erkannt, für die Zielressource aber nicht erlaubt ist.
Der Statuscode 405 Method Not Allowed bedeutet, dass der Server die Methode erkennt, sie für die Zielressource jedoch nicht zulässt. Der Statuscode 501 Not Implemented bedeutet, dass der Server die Methode nicht erkennt oder nicht in der Lage ist, sie für irgendeine Ressource zu unterstützen. Dabei handelt es sich um einen dauerhaften Zustand auf Serverebene.
Dieser Status ist angemessen, wenn der Server die Anfragemethode nicht erkennt und die Anfrage daher für keine Ressource unterstützen kann.
SEO-Auswirkung
Suchmaschinen wie Google indexieren keine URL, die den Status 501 Not Implemented zurückgibt. Zuvor indexierte URLs, die diesen Statuscode liefern, werden aus den Suchergebnissen entfernt.
Einige APIs erweitern die Bedeutung von 501 über fehlende Methoden hinaus. Die Shopify API gibt 501 Not Implemented zurück, wenn der angeforderte Endpunkt im aktuellen Tarif des Shops nicht verfügbar ist, etwa bei einer auf Shopify Plus beschränkten Funktion. Der Endpunkt existiert in der API, ist jedoch an die Abonnementstufe gebunden.
Beispiel
Der Client fordert eine Ressource an, und der Server antwortet mit dem Statuscode 501 Not Implemented, weil die Anfragemethode zwar erkannt, aber noch nicht unterstützt wird.
Anfrage
POST /requests?id=111&flag=start HTTP/1.1
Host: example.com
Antwort
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>
Behebung
Prüfen Sie, ob die HTTP-Methode in der Anfrage korrekt ist. Ein PATCH an einen Server, der nur GET und POST erwartet, löst einen 501 aus, wenn der Server überhaupt keinen Handler für die Methode besitzt.
Häufige Grundursachen und ihre Behebung:
Nicht unterstützte Methode auf dem Server. In Apache steuern die Direktiven Limit und LimitExcept die erlaubten Methoden. In nginx erfolgt die Methodenfilterung im location-Block. Stellen Sie sicher, dass die vom Client gesendete Methode nicht durch die Konfiguration ausgeschlossen wird.
Fehlende Servermodule. Apache benötigt mod_dav für WebDAV-Methoden wie PROPFIND und MKCOL. IIS benötigt WebDAV Publishing sowie die korrekten Handler-Zuordnungen. Aktivieren Sie das Modul und starten Sie den Dienst neu.
Reverse Proxy, der Methoden entfernt oder umschreibt. Manche Proxys wandeln nicht standardisierte Methoden in GET um. Prüfen Sie in nginx, dass proxy_method nicht gesetzt ist, sofern dies nicht beabsichtigt ist. Vergewissern Sie sich bei AWS ALB, dass die Zielgruppe die benötigten HTTP-Methoden unterstützt.
Veraltete Serversoftware. Ältere Webserver-Builds unterstützen keine Methoden, die erst nach ihrer Veröffentlichung standardisiert wurden. Aktualisieren Sie Apache, nginx oder IIS auf eine aktuelle stabile Version.
Blockierung durch Firewall oder WAF. Web Application Firewalls und Sicherheits-Plugins lehnen Methoden wie PUT, DELETE oder OPTIONS mitunter ab. Überprüfen Sie die WAF-Regeln und nehmen Sie die für den Endpunkt benötigten Methoden in die Positivliste auf.
API-Funktion durch Tarifstufe eingeschränkt. Plattformen wie Shopify geben 501 zurück, wenn ein Endpunkt zwar existiert, für die Abonnementstufe des Shops aber nicht verfügbar ist. Prüfen Sie die Tarifanforderungen der Funktion in der API-Dokumentation und führen Sie bei Bedarf ein Upgrade durch.
Vergewissern Sie sich auf Client-Seite, dass die Anfrage-URL korrekt ist. Ein Tippfehler, der den Verkehr an den falschen Server oder Endpunkt leitet, führt zu einem 501, wenn der empfangende Server keine Implementierung für die Methode besitzt.
Code-Referenzen
.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