501 Not Implemented
用法
501 Not Implemented 状态码意味着服务器由于服务器端的缺陷而无法完成请求。这与 405 Method Not Allowed 状态码类似,不过 405 特指请求的方法能被识别,但不被目标资源所允许。
405 Method Not Allowed 状态码表示服务器识别该方法,但不允许对目标资源使用该方法。501 Not Implemented 状态码表示服务器不识别该方法,或不具备为任何资源支持该方法的能力。这是一种永久性的服务器级别状况。
当服务器不识别请求方法、因而无法为任何资源支持该请求时,此状态是恰当的。
SEO 影响
像 Google 这样的搜索引擎不会索引返回 501 Not Implemented 状态的 URL。过去已被索引但返回此状态码的 URL 会从搜索结果中移除。
一些 API 将 501 的含义扩展到超出”方法缺失”的范围。当所请求的端点在店铺当前套餐上不可用时(例如某项功能仅限 Shopify Plus),Shopify API 会返回 501 Not Implemented。该端点存在于 API 界面中,但受订阅层级的限制。
示例
客户端请求某个资源,服务器返回 501 Not Implemented 状态码,因为请求方法虽被识别但尚未受支持。
请求
POST /requests?id=111&flag=start HTTP/1.1
Host: example.com
响应
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>
如何修复
确认请求中的 HTTP 方法是否正确。如果服务器根本没有处理该方法的处理器,向只期望 GET 和 POST 的服务器发送 PATCH 就会触发 501。
常见根本原因及其修复方法:
服务器上不受支持的方法。在 Apache 中,Limit 和 LimitExcept 指令控制允许的方法。在 nginx 中,方法过滤在 location 块中进行。确保客户端发送的方法未被配置排除。
缺少服务器模块。Apache 对 PROPFIND 和 MKCOL 等 WebDAV 方法需要 mod_dav。IIS 需要 WebDAV Publishing 以及正确的处理器映射。启用该模块并重启服务。
反向代理剥离或重写方法。有些代理会将非标准方法转换为 GET。在 nginx 中,除非有意为之,否则确认未设置 proxy_method。在 AWS ALB 中,确认目标组支持所需的 HTTP 方法。
服务器软件过时。较旧的 Web 服务器版本不支持在其发布之后才标准化的方法。将 Apache、nginx 或 IIS 更新到当前稳定版本。
防火墙或 WAF 屏蔽。Web 应用防火墙和安全插件有时会拒绝 PUT、DELETE 或 OPTIONS 等方法。检查 WAF 规则,并将该端点所需的方法加入允许列表。
API 功能受套餐层级限制。像 Shopify 这样的平台会在端点存在但对店铺订阅级别不可用时返回 501。在 API 文档中核实该功能的套餐要求,必要时升级。
在客户端,确认请求 URL 正确。当接收方服务器没有实现该方法时,将流量误导到错误的服务器或端点的拼写错误会返回 501。
代码参考
.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