405 方法不被允许
405 Method Not Allowed 表示目标资源存在,但它不支持请求所用的方法。按规范要求,返回 405 的响应必须带 Allow 头,列出该资源实际支持的方法。它与 404 的区别在于资源是存在的,与 501 的区别在于服务器认识这个方法、只是这个资源不提供。写接口时如果路由存在但只允许 GET,收到 POST 就应当返回 405 而不是 404。
基本信息
| 名称 | 405 Method Not Allowed |
|---|---|
| 作用 | 方法不被该资源支持 |
| 规范 | RFC 9110 第 15.5.6 节 |
| 必须携带 | Allow 响应头,列出该资源支持的方法 |
| 典型场景 | 接口只开放读取,收到写入方法;网关方法与后端路由不一致 |
| 常见混淆 | 404 是资源不存在,501 是服务器不认识该方法 |
探测与确认
探测与确认
curl -si -X DELETE https://api.example.com/users/101 # 用不支持的方法探测
# HTTP/1.1 405 Method Not Allowed
# Allow: GET, PUT # 该资源实际支持的方法
curl -si -X OPTIONS https://api.example.com/users/101 | grep -i allow # 先用 OPTIONS 看支持哪些方法
curl -si -X POST https://api.example.com/users/101 # 对比:POST 被拒时同样是 405与相近状态码对照
| 状态码 | 含义 | 判断要点 |
|---|---|---|
| 404 Not Found | 资源路径不存在 | 路由未注册或写错路径,Allow 头不会出现 |
| 405 Method Not Allowed | 资源存在但不支持该方法 | 一定带 Allow,说明路由注册成功 |
| 501 Not Implemented | 服务器不认识该方法 | 方法名本身不被支持,与具体资源无关 |
| 400 Bad Request | 请求本身无法解析 | 常因方法名写错或报文体损坏 |
| 415 Unsupported Media Type | 请求体媒体类型不被支持 | 方法与路径都对,只是 Content-Type 不符 |
典型使用场景
- 只读接口被写入方法访问:如报表接口只提供 GET,收到 PUT 应回 405
- 反向代理或网关改写了请求方法,后端路由因此不匹配
- 前后端联调时确认路由是否真的注册成功,用 404 与 405 区分两种失败
- CORS 预检里 Access-Control-Allow-Methods 与真实方法不一致,真实请求落回 405
- 对写接口做安全测试时探测可用的方法集合
405 与 404 的区分对排查非常关键:看到 405 说明请求已经打到正确的处理器上,问题在方法映射;看到 404 才要怀疑路径、域名与服务是否匹配。