HTTP 405 Method Not Allowed

地址正确,方法错误:资源存在,但不接受该 HTTP 方法。

HTTP 405 是什么意思

HTTP 405 Method Not Allowed 表示服务器识别该 URL,但不支持所使用的 HTTP 方法——GET、POST、PUT、DELETE。响应中必须包含 Allow 头,列出该 URL 所支持的方法。

这几乎总是客户端与 API 之间的不匹配:表单向一个页面路由发送了 POST、脚本在 API 期望 PATCH 的地方发送了 PUT,或 webhook 配置了错误的方法。

405 错误的常见原因

  • 向一个只处理 GET(或反之)的端点发送了 POST——在复制粘贴 API 示例后很常见。
  • 一个重定向(301/302)在请求到达端点之前将 POST 转换成了 GET。
  • Web 服务器全局阻止了 PUT/DELETE 等方法,而应用程序却期望使用它们。
  • 路由错误:目标端点是 /api/items(POST),但请求命中了 /items。

作为开发者该如何修复

  • 查看 Allow 响应头——它准确列出了该 URL 接受的方法。
  • 查阅 API 文档,确认正确的方法与路径组合。
  • 如果路径中存在重定向,应使用 307/308,以便方法在跳转过程中得以保留。
  • 在服务器端,确保框架路由声明了该方法,并且没有代理将其剥离。

示例响应

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
Content-Type: application/json

{"error":"method_not_allowed"}

常见问题

如何查看某个 URL 支持哪些方法?

查看 405 响应中的 Allow 头,或向该 URL 发送 OPTIONS 请求。

为什么我的 POST 变成了 GET?

中途的 301 或 302 重定向让客户端切换了方法。对接受 POST 的端点应使用 307/308 重定向。

405 是客户端问题还是服务器问题?

形式上属于客户端错误,但它往往暴露的是服务器端配置问题——路由缺少某个方法,或代理阻止了某些方法。