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