HTTP 501 Not Implemented
服务器根本无法执行该操作:所请求的功能——通常是 HTTP 方法——完全不受支持。
HTTP 501 的含义
HTTP 501 Not Implemented 表示服务器无法识别或不支持完成该请求所需的功能。规范主要将其保留给无法识别的 HTTP 方法——服务器无法为任何资源处理该方法,这与 405 不同:在 405 中,方法本身是已知的,只是不允许用于该 URL。
在实践中,501 也常出现在代理和遗留服务器上,它们收到了自己从未被设计用来处理的请求(如 WebDAV 方法、旧技术栈上的 PATCH),或者作为配置了一半的后端的占位响应。
501 错误的常见原因
- 服务器完全未实现的 HTTP 方法(例如旧服务器上的 PATCH 或 WebDAV 方法)。
- 代理或网关收到了一个它无法转发的请求方法。
- 在实现完成之前就已部署的桩(stub)端点。
- 来自有缺陷客户端的格式错误的方法名(例如 GETT 这类拼写错误)。
作为开发者该如何修复
- 检查实际发送的方法——拼写错误和大小写错误的自定义动词其实相当常见。
- 如果该方法是合法的(例如 PATCH),请升级或配置服务器/框架以支持它,或者在技术栈允许的情况下,通过带有覆盖头的 POST 进行隧道传输。
- 要与 405 区分开:如果只有一个路由拒绝该方法,那就修复该路由(属于 405 的范畴);如果整个服务器都拒绝,那就是平台层面的能力缺口。
- 不要在生产环境的 API 中为未完成的功能返回 501——由于 501 默认是可缓存的,建议优先使用 404 或功能开关(feature flag)。
示例响应
HTTP/1.1 501 Not Implemented
Content-Type: application/json
{"error":"not_implemented","message":"PATCH is not supported by this server"}常见问题
501 和 405 有什么区别?
405 表示 URL 存在,但拒绝该方法(参见 Allow 响应头)。501 表示服务器对任何资源都完全不支持该方法。
501 错误是暂时性的吗?
通常不是——它表明缺少某项能力,而不是服务中断。只有当服务器获得对所请求功能的支持后,该问题才会消失。
为什么我的 PATCH 请求会返回 501?
服务器或中间代理的版本早于对 PATCH 的支持。请升级技术栈、启用该方法,或使用基于 POST 的方法覆盖(method override)。