找回密码
 立即注册
首页 业界区 安全 面试复盘---常见的状态码

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

师佳思 3 小时前
引言


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


  • 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,说明请求到达服务器,服务器正常返回响应,但是返回的数据内容可能是错误的。
  • 例如:
  1. {
  2.   "code": 500,
  3.   "msg": "数据库查询失败",
  4.   "data": null
  5. }
复制代码

  • HTTP状态码是:
  1. 200 OK
复制代码

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


  • 在很多系统设计中:HTTP状态码表示网络请求是否成功,业务状态码表示业务是否成功。
  • 例如:
  1. {
  2.   "code": 0,
  3.   "msg": "success",
  4.   "data": {...}
  5. }
  6. 或者
  7. {
  8.   "code": 5001,
  9.   "msg": "用户不存在",
  10.   "data": null
  11. }
复制代码

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

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


  • 情况1:业务异常但返回200
  • 例如用户登录:
  1. {
  2.   "code": 1001,
  3.   "msg": "用户名或密码错误"
  4. }
复制代码

  • HTTP状态:
  1. 200 OK
复制代码

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

  • 返回:
  1. {
  2.   "code": 500,
  3.   "msg": "数据库错误"
  4. }
复制代码

  • HTTP仍然:200 ok
  • 情况3:返回数据错误
  • 接口返回:
  1. {
  2.   "userId": 1,
  3.   "balance": -100000
  4. }
复制代码

  • HTTP:200 ok
  • 但业务逻辑明显有问题。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册