HTTPQUERY
English

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