麦式参考 MickerBook Reference

HTTP 状态码

HTTP Status Code

也常被叫作:状态码HTTP 状态码200 404 500返回码接口状态码

你可能会这么说

「打开网页或接口时报的那些三位数字(404、500),是服务器在告诉你这次请求是成了还是哪里出了问题。」

HTTP 状态码 HTTP Status Code

服务器用三位数字报信:2 开头成功、4 开头是你这边的问题、5 开头是服务器自己的问题。

你向服务器喊一嗓子(发请求),状态码就是服务器回话的第一句。按百位数字分三档:2 开头是成功(200 = 找到了、正常返回);4 开头是「你这边的问题」——404 你要的东西不存在、401 你没登录、403 登录了但没权限、400 你发的格式不对;5 开头是「服务器自己的问题」——500 服务器内部出错、503 它忙不过来或在维护。记住这个分档比背数字有用:看到 4 开头先检查你发的请求,看到 5 开头是服务器的事,别在前端代码里瞎找。

你日常最常撞见的是 200(成功)、404(找不到页面或内容)、500(服务器出错)。另外几个常见但容易弄混的:301/302 是「页面搬家了,浏览器自动跟着跳」;401 是「先登录」;403 是「登录了也不许看」;503 是「暂时歇业,一会儿再来」。状态码不光是程序员的事:404 页面是不是友好、500 是不是兜底成一句人话而不是白屏,直接决定用户撞上错误时的感受。

你不写代码也能亲眼看到真实状态码:浏览器按 F12 打开开发者工具,切到「网络」面板,刷新页面,每个请求后面都标着状态码。AI 说「错误已处理」,你就来这儿看。还要留个心眼:有些接口即使逻辑失败也返回 200,把错误藏在返回内容里——只看状态码不看返回体,会被骗。

长什么样 真实可交互,不是截图

GET  https://mickerbook.com/reference/button
→  200 OK   这次请求成功,内容返回了

GET  https://mickerbook.com/reference/no-such-page
→  404 Not Found   你要的内容不存在(不是服务器坏了)

GET  https://example.com/api/users
→  500 Internal Server Error   服务器自己出错了
2xx 成功4xx 你的问题5xx 服务器的问题

状态码按百位分三档看:2 开头成功、4 开头检查你自己的请求、5 开头是服务器的事。这个分法比背每个数字更有用。

拆开看,里面有这几块

  1. 1
    百位分类 Category digit

    第一位数字是总分类:2 成功、3 重定向、4 请求方的问题、5 服务器的问题,后两位是具体原因。

  2. 2
    状态码本身 Code

    三位数字,如 200、404、500。浏览器网络面板里每个请求都会标一个,是能亲眼看到的事实。

  3. 3
    响应内容 Response body

    状态码只是结论,具体数据或错误说明在返回内容里。有些接口逻辑失败也返回 200,错误藏在内容里,只看状态码会漏。

常见的有哪几种

2xx 成功2xx Success

请求被接收并处理了,200 最常见。

用在:页面加载成功、接口正常返回

3xx 重定向3xx Redirect

内容搬到别处了,浏览器自动跟着跳。301 永久、302 临时。

用在:网址换新地址、http 跳 https

4xx 请求方的问题4xx Client Error

错在请求本身:404 不存在、401 未登录、403 无权限、400 格式不对。

用在:地址写错、没带凭证、参数不对

5xx 服务器的问题5xx Server Error

服务器自己出错了:500 内部错误、503 忙不过来或维护中。

用在:代码报错、过载、停机维护

容易搞混?这样区分

HTTP 状态码 业务错误码 Business error code

HTTP 状态码是传输层的结论(这次请求成没成);业务错误码是接口返回内容里的字段(如 code: 1 表示「这个账号已被封」)。有些接口连业务失败也返回 200,只看状态码不看返回体,会漏掉这类失败。

看 业务错误码
HTTP 状态码 404 与 403 404 vs 403

404 是「不存在」,403 是「存在但你没权限」。把 403 说成 404,用户会以为是自己地址错了,而不是权限不够;反过来把 404 说成 403,等于告诉别人「这里有什么东西」。

什么时候用得上

页面 404

网址不存在时返回 404 并展示友好页面(提示回到首页),而不是白屏或 500。

接口失败提示

接口返回 4xx / 5xx 时前端给不同提示:4 开头提示检查输入或登录,5 开头提示稍后再试。

上线后看 5xx 比例

线上监控里 5xx 突然升高,说明刚上线的版本出问题了,优先排查而不是等用户来报。

你可以这样跟 AI 说

直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。

【范围】只处理 [页面/接口名] 的请求与错误,不动其他模块
【目标】
  1. 请求失败时返回正确的状态码:不存在的内容返回 404,未登录返回 401,无权限返回 403,服务器出错返回 500,不要一律返回 200
  2. 前端根据状态码给对应提示:4 开头提示检查输入或登录,5 开头提示稍后再试
【边界】不要自造一套复杂错误码体系;不要改动现有鉴权逻辑;不要为了省事把所有错误都返回 200 再用内容区分
【交付】
  1. 指出每种错误在哪个文件、返回什么状态码
  2. 我按 F12 打开网络面板能看到真实的状态码,而不是页面代码里写死的
  3. 每种错误给我一个真实触发方式(比如访问哪个不存在的地址能看到 404)
【提醒】不确定某类错误该返回什么就问,不要自己发明数字

「不要一律返回 200」是关键:很多 AI 图省事把业务失败也返回 200,状态码就失去意义,前端永远分不清「成功」和「假成功」。

它说「做好了」,你怎么自己验

这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「运行时」这层:真的跑起来了,能在本机看到结果。

要亲眼看到这些,才算数

  • 按 F12 打开浏览器开发者工具,切到「网络」面板,刷新页面,看首页主请求的状态码是 200。
  • 在网址栏故意访问一个不存在的地址(比如 /no-such-page),确认返回 404 且有友好页面,不是白屏也不是 500。
  • 让 AI 给你看一个接口的完整返回:状态码 + 返回内容,而不是只转述一句「成功了」。
  • 故意提交错误数据(比如把邮箱填成 abc 再点提交),看返回的是 4 开头还是 5 开头:4 开头说明校验生效,5 开头说明后端没兜住。
  • 如果接口在数据出错时也返回 200,追问返回体里区分成功失败的那个字段叫什么、值是多少。

它常这么糊弄你

  • 「错误已处理」——但页面没有任何提示,网络面板里那个请求实际是 500。打开网络面板看真实状态码。
  • 一律返回 200:逻辑失败也返回 200,把错误码放在返回体里(如 code: 1 表示失败)。只看状态码会被骗,要连返回体一起看。
  • 「404 页面已加」——但只是写了个好看的静态页,真实请求不存在时返回的其实是 500 或 200+空数据。
  • 把 403 说成 404(「没有这个页面」):权限问题被伪装成不存在,用户不知道是自己没权限。
  • 状态码在页面代码里写死而不是服务器真实返回——刷新后看网络面板立刻露馅。

状态码能验到「运行时」层:不用写代码,F12 网络面板里每个请求的真实状态码一目了然。但「每个接口的错误都被正确处理」覆盖所有接口,那要逐个验收加线上监控,才是生产层的事。

考考你 选一个你觉得对的

AI 说「保存接口已经接好,错误也处理了」。但你点保存时数据根本没存进去,最该先看什么?