引言
- 最近面试,经常会遇见自己熟悉的八股却回答不上来,或者是磕磕巴巴,不知是自己初次面试导致紧张还是不够熟练,实在是令人感到惋惜。各位园友有什么面试的小妙招请给我示下,吾定虚心接受,感激不尽;或者大家有什么面试疑惑,也可以一起讨论,敬请期待。
常见的状态码
- 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
- 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
- }
复制代码 业务层面:很多系统会用 200 + 业务码
- 在很多系统设计中:HTTP状态码表示网络请求是否成功,业务状态码表示业务是否成功。
- 例如:
- {
- "code": 0,
- "msg": "success",
- "data": {...}
- }
- 或者
- {
- "code": 5001,
- "msg": "用户不存在",
- "data": null
- }
复制代码 HTTP状态码业务状态200请求成功code=0业务成功code!=0业务失败
实际开发中的典型情况
- {
- "code": 1001,
- "msg": "用户名或密码错误"
- }
复制代码
- 原因:请求本身没问题,只是业务失败
- 情况2:接口逻辑错误但仍返回200
- try {
- queryUser();
- } catch(Exception e) {
- return Result.fail("数据库错误");
- }
复制代码- {
- "code": 500,
- "msg": "数据库错误"
- }
复制代码
- HTTP仍然:200 ok
- 情况3:返回数据错误
- 接口返回:
- {
- "userId": 1,
- "balance": -100000
- }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |