面试复盘时,如何理解常见的HTTP状态码含义?

摘要:引言 最近面试,经常会遇见自己熟悉的八股却回答不上来,或者是磕磕巴巴,不知是自己初次面试导致紧张还是不够熟练,实在是令人感到惋惜。各位园友有什么面试的小妙招请给我示下,吾定虚心接受,感激不尽;或者大家有什么面试疑惑,也可以一起讨论,敬请期待
引言 最近面试,经常会遇见自己熟悉的八股却回答不上来,或者是磕磕巴巴,不知是自己初次面试导致紧张还是不够熟练,实在是令人感到惋惜。各位园友有什么面试的小妙招请给我示下,吾定虚心接受,感激不尽;或者大家有什么面试疑惑,也可以一起讨论,敬请期待。 常见的状态码 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状态码表示网络请求是否成功,业务状态码表示业务是否成功。
阅读全文