师佳思 发表于 2026-3-13 00:35:00

面试复盘---常见的状态码

引言


[*]最近面试,经常会遇见自己熟悉的八股却回答不上来,或者是磕磕巴巴,不知是自己初次面试导致紧张还是不够熟练,实在是令人感到惋惜。各位园友有什么面试的小妙招请给我示下,吾定虚心接受,感激不尽;或者大家有什么面试疑惑,也可以一起讨论,敬请期待。
常见的状态码


[*]HTTP 状态码(Status Code)是服务器对客户端请求结果的响应标识。在面试或考试中,一般会按照5大类来说明:
1xx:信息提示


[*]表示请求已经收到,继续处理,在实际开发中比较少见。
[*]100 continue

[*]含义:客户端可以继续发送请求体
[*]一般出现在大文件进行上传时

2xx:成功


[*]表示请求成功处理。
[*]200 OK(最常见)

[*]含义:请求成功,服务器正常返回数据

[*]201 Created

[*]含义:请求成功,并创建了新资源
[*]通常在 POST请求(如注册新用户)成功后返回。

[*]204 No Content

[*]含义:请求成功,但没有返回内容
[*]常用于DELETE或单纯的设置更新。

3xx:重定向


[*]表示需要进一步操作才能完成请求。
[*]301 Moved Permanently(永久重定向)

[*]含义:资源地址永久改变
[*]比如网站换了新域名,旧网址会永久跳到新网址。

[*]302 Found(临时重定向)

[*]含义:资源暂时移动
[*]比如登录失效后自动跳转到登录页。

[*]304 Not Modified

[*]含义:资源没有修改,直接使用缓存
[*]表示文件没变动,请直接使用浏览器缓存。这能极大地节省带宽并加快加载速度。

4xx:客户端错误


[*]这类状态码通常意味着请求发出的方式不对。表示请求有问题,这是最常见的一类。
[*]400 Bad Request

[*]含义:请求格式错误
[*]通常是前端传参格式不对(比如后端要JSON,你发了字符串)。

[*]401 Unauthorized

[*]含义:未认证
[*]没登录,或者Token失效了。

[*]403 Forbidden

[*]含义:有权限验证,但没有权限
[*]你登录了,但你只是普通用户,却想访问管理员页面。

[*]404 Not Found(最经典)

[*]含义:资源不存在
[*]URL拼写错了,或者该数据已被彻底删除。

[*]405 Method Not Allowed

[*]含义:请求方法错误
[*]比如后端只开了GET 接口,你却用了 POST 去刷。

5xx:服务器错误


[*]这类状态码说明服务器内部出事了,通常需要后端开发介入排查。
[*]500 Internal Server Error

[*]含义:服务器代码异常
[*]代码写错了、空指针异常、数据库连接断了等都会报这个。

[*]502 Bad Gateway

[*]含义:网关错误
[*]通常是Nginx转发请求时,后面的服务器(如Python或Java服务)没启动。

[*]503 Service Unavailable

[*]含义:服务器暂时不可用
[*]通常是因为服务器过载或正在维护。

[*]504 Gateway Timeout

[*]含义:网关请求超时
[*]后端处理时间太长(比如查几十万条数据),导致Nginx等不下去了。

面试原题

如果状态码返回200,后端一定没有问题吗?


[*]当时面试官问到我这个问题,直接不知道说什么,脑子短路了;本能是回答不一定,但是答完之后就不知道该说啥了,直接原地没了,思来想去还是自己实力问题,平时没有深究,囫囵吞枣的一遍过,导致面试吃大亏,只能说还得练。
正确回答:

HTTP 层面:200 只代表请求成功


[*]不一定。HTTP 状态码 200 只表示“HTTP 请求成功处理”,并不代表后端业务一定没有问题。
[*]返回200,说明请求到达服务器,服务器正常返回响应,但是返回的数据内容可能是错误的。
[*]例如:
{
"code": 500,
"msg": "数据库查询失败",
"data": null
}

[*]HTTP状态码是:
200 OK

[*]但业务其实失败了。
业务层面:很多系统会用 200 + 业务码


[*]在很多系统设计中:HTTP状态码表示网络请求是否成功,业务状态码表示业务是否成功。
[*]例如:
{
"code": 0,
"msg": "success",
"data": {...}
}
或者
{
"code": 5001,
"msg": "用户不存在",
"data": null
}

[*]此时
HTTP状态码业务状态200请求成功code=0业务成功code!=0业务失败

[*]所以:HTTP成功 ≠ 业务成功
实际开发中的典型情况


[*]情况1:业务异常但返回200
[*]例如用户登录:
{
"code": 1001,
"msg": "用户名或密码错误"
}

[*]HTTP状态:
200 OK

[*]原因:请求本身没问题,只是业务失败
[*]情况2:接口逻辑错误但仍返回200
try {
    queryUser();
} catch(Exception e) {
    return Result.fail("数据库错误");
}

[*]返回:
{
"code": 500,
"msg": "数据库错误"
}

[*]HTTP仍然:200 ok
[*]情况3:返回数据错误
[*]接口返回:
{
"userId": 1,
"balance": -100000
}

[*]HTTP:200 ok
[*]但业务逻辑明显有问题。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 面试复盘---常见的状态码