400与404 HTTP错误的区别是什么?请举例说明二者差异
400 Bad Request vs 404 Not Found:核心区别与实用示例
Hey 大家好!作为天天跟HTTP状态码打交道的开发者,我来给大家掰扯清楚400和404这两个常见错误的本质区别,再配上实际场景的例子,保证一看就懂。
一、400 Bad Request:请求本身就有问题
这个状态码的核心是:服务器根本没法理解你的请求,因为请求的语法、格式或者数据是无效的。简单说就是你给服务器发了一堆“乱码”或者不符合规则的内容,服务器连处理的第一步都做不了。
常见示例:
- 提交表单时,必填的邮箱字段填成了
alice@example(缺少域名后缀),或者手机号填了123abc,服务器校验不通过,返回400。 - 发送JSON格式的API请求时,写错了语法:比如
{"username": "Bob", password: "123456"}这里password没加双引号,服务器解析JSON失败,直接返回400。 - 请求参数类型错误:比如调用
/api/products?price=cheap,服务器要求price是数字,你传了字符串,服务器没法处理,返回400。
二、404 Not Found:资源找不到,但请求是合法的
这个状态码的意思是:服务器完全能看懂你的请求,但就是找不到你要的东西。请求本身是符合规则的,但目标资源要么不存在,要么路径写错了。
常见示例:
- 手动输入URL时拼错了:比如想访问某个平台的回答,却写成了
https://example.com/answer/1234567890abc,这个ID的回答根本不存在,服务器返回404。 - 请求已被删除的资源:比如之前有个用户ID是100的接口
/api/users/100,但这个用户已经被删除了,现在再请求这个地址,服务器返回404。 - 路由配置错误:后端开发时漏写了
/api/comments的路由,当你请求这个地址时,服务器找不到对应的处理逻辑,返回404。
三、关键区别总结
为了更直观,我整理了一个对比表:
| 对比维度 | 400 Bad Request | 404 Not Found |
|---|---|---|
| 问题根源 | 请求本身无效(语法/格式错误) | 请求合法,但目标资源不存在 |
| 责任方 | 客户端(发送了错误的请求) | 可能是客户端(URL拼写错)或服务器(资源被删) |
| 服务器处理状态 | 无法解析请求,直接拒绝处理 | 能正常解析请求,只是找不到资源 |
打个通俗的比方:400就像你给外卖员递了一张地址写得乱七八糟、连小区名字都写错的订单,外卖员根本不知道要送哪儿;404就像你写的地址格式完全正确,但这个地址是个已经拆了的老小区,外卖员找不到地方。
内容的提问来源于stack exchange,提问作者Serhii




