HTTP常考状态码详解(附面试官考察点深扒)

前言:那个让人尴尬的面试现场 😅

不管是校招萌新还是想跳槽的老鸟,面试时大概率都遇到过这样一个场景:

面试官推了推眼镜,轻描淡写地问了一句:"简单说一下 301 和 302 的区别?再讲讲 304 是怎么产生的? "

这时候,很多人脑子里可能只有一行字:"完了,这题我看过,但我忘了......"

于是只能支支吾吾:"额,一个是永久,一个是临时...那个...304好像是缓存?"

面试官微微一笑,你的心里却凉了半截。

其实,HTTP 状态码(Status Code) 真的不是枯燥的数字。对于我们后端开发来说,它不仅是面试的"敲门砖",更是线上排错(Troubleshooting)的"听诊器"。看到 502 和看到 504,排查方向可是完全不一样的!

今天这篇文章,咱们不搞死记硬背,我带大家从应用场景面试官视角,把这块硬骨头彻底嚼碎了!


🌏 状态码家族概览:先看大局

HTTP 状态码由 3 位数字组成,第一个数字定义了响应的类别。你可以把它们想象成 5 个性格迥异的家族:

  • 1xx:消息(Information)

    • 🐢 一句话总结:"服务收到了,你继续发。"(实际开发中很少直接处理)
  • 2xx:成功(Success)

    • 一句话总结:"操作成功,舒服了。"
  • 3xx:重定向(Redirection)

    • 👉 一句话总结:"资源搬家了,你去那边找它。"
  • 4xx:客户端错误(Client Error)

    • 🙅‍♂️ 一句话总结:"你(客户端)发的东西有毛病,服务器处理不了。"
  • 5xx:服务端错误(Server Error)

    • 💥 一句话总结:"我(服务端)炸了,不是你的锅。"

🔍 核心状态码详解:别只背定义,要懂场景

1. 2xx 系列:不仅仅只有 200

  • 200 OK

    • 含义:最常见的,请求成功。
    • 场景:网页正常打开,接口正常返回数据。
  • 201 Created

    • 含义:请求成功并且服务器创建了新的资源。
    • 场景:RESTful API 中,使用 POST 创建用户或订单成功后,应该返回 201 而不是 200。
  • 204 No Content

    • 含义:服务器处理成功,但不需要返回任何实体内容。
    • 场景:前端发送 DELETE 请求删除某条记录,后端删完了,没必要回传什么数据,给个 204 告诉前端"妥了"即可。
  • 206 Partial Content (💡划重点)

    • 含义:服务器已经成功处理了部分 GET 请求。
    • 场景大文件断点续传、视频流媒体播放。前端会在 Header 里带上 Range: bytes=0-100,后端就只返回这部分数据。面试问到"断点续传怎么做",这个状态码是核心。

2. 3xx 系列:重定向与缓存的纠葛

  • 301 Moved Permanently (永久重定向)

    • 含义 :资源已经被永久移动到了新位置。
    • 场景:网站更换域名(如 http 升级到 https),或者老旧的 URL 废弃。
    • 关键点 :浏览器会缓存这个重定向,下次你再访问老地址,浏览器直接就去新地址了,根本不会去问服务器。
  • 302 Found (临时重定向)

    • 含义:资源暂时去别的地方了,但未来可能还会回来。
    • 场景:活动页面的临时跳转,未登录用户跳转到登录页。
  • 304 Not Modified (🔥 超高频考点)

    • 含义:资源没修改,你可以直接用你本地的缓存。

    • 原理

      1. 浏览器第一次请求资源,服务器返回 200,并在 Header 里带上 ETag (文件指纹) 或 Last-Modified (最后修改时间)。
      2. 浏览器第二次请求,Header 里带上 If-None-Match (对应 ETag) 或 If-Modified-Since。
      3. 服务器对比发现:"哎?这文件我没改过啊!"
      4. 服务器直接返回 304(响应体是空的,省带宽),告诉浏览器:"别下新的了,用你缓存里那个!"

3. 4xx 系列:客户端的锅

  • 400 Bad Request

    • 含义:请求参数有误,语义错误。
    • 场景:前端传的 JSON 格式不对,或者必填参数没传。
  • 401 Unauthorized vs 403 Forbidden (⚠️ 易混淆)

    • 401未认证。意思是"你是谁?我不认识你"。(通常没登录,或者 Token 过期)。
    • 403禁止。意思是"我知道你是谁,但你没权限进这个屋"。(比如普通用户想删管理员的数据)。
  • 404 Not Found

    • 含义:资源未找到。
    • 场景:URL 输错了,或者资源被删了。
  • 405 Method Not Allowed

    • 含义:方法不被允许。
    • 场景:接口只支持 POST,你非要用 GET 去调。

4. 5xx 系列:服务端的泪

  • 500 Internal Server Error

    • 含义:服务器内部错误。
    • 场景:后端代码抛了空指针异常(NPE)、数据库连不上了、代码逻辑炸了。
  • 502 Bad Gateway vs 504 Gateway Timeout (🔥 线上排错必问)

    • 这俩通常出现在 Nginx(网关)后端服务(如 Java/Go/Python 应用) 之间。

    • 502 Bad Gateway上游服务挂了或返回了无效响应

      • 大白话:Nginx 给后端发请求,后端直接断开连接,或者后端进程直接崩了(端口通但不干活)。
    • 504 Gateway Timeout上游服务超时

      • 大白话:Nginx 给后端发请求,后端活着,但是处理太慢了(比如慢 SQL 查了 60 秒),超过了 Nginx 设置的等待时间。

🎯 面试官的"伏击圈":最常考&最易混淆点

这里是整篇文章的精华,面试官问这些问题时,心里其实是有"小九九"的。

1. 问:301 和 302 到底有啥本质区别?我不都是跳过去了吗?

  • 🚫 易忘点 :只记得"永久"和"临时",忘了SEO(搜索引擎优化)缓存

  • 🕵️‍♂️ 面试官想考察什么:你是否了解 HTTP 协议对搜索引擎的影响,以及浏览器缓存策略。

  • 💯 完美回答范例

    "虽然用户体验一样,但核心区别在于缓存SEO
    301 会被浏览器强制缓存,下次根本不请求服务器;搜索引擎会把旧地址的权重转移到新地址。
    302 不会被缓存,每次都会去问服务器,搜索引擎也会保留旧地址。

    所以做网站迁移一定要用 301,否则旧域名的 SEO 权重就丢了。"

2. 问:304 状态码是怎么产生的?

  • 🚫 易忘点:只知道是缓存,说不出 ETag 和 Last-Modified 的协商过程。

  • 🕵️‍♂️ 面试官想考察什么Web 性能优化。你是否懂"协商缓存"机制,是否知道如何通过 HTTP 头节省带宽。

  • 💯 完美回答范例

    "304 是协商缓存 的结果。

    客户端带着 If-None-Match (ETag) 或 If-Modified-Since 发起请求。

    服务端对比发现资源未变,就不传 Body,只回一个 304 头。

    这能极大减少带宽消耗,提升页面加载速度。"

3. 问:线上报 502 和 504,你怎么排查?

  • 🚫 易忘点:分不清谁是因谁是果,瞎查数据库。

  • 🕵️‍♂️ 面试官想考察什么Troubleshooting(故障排查)能力。这是区分"码农"和"工程师"的分水岭。

  • 💯 完美回答范例

    "看到 502 ,我首先怀疑后端服务没启动进程崩了 ,或者 Nginx 配置的 Upstream 地址配错了。

    看到 504 ,说明后端连接正常但处理太慢 。我会去查后端日志看有没有慢 SQL ,或者是不是死锁导致请求卡住超时了。"


📝 总结:一张图带你记忆

最后,给兄弟们整几个顺口溜,助你记忆:

  • 200:皆大欢喜。
  • 301 :搬家了,不回来了;302:出差了,过几天回。
  • 304:没改过,用旧的。
  • 401 :没身份证;403:有身份证但不让进。
  • 404:查无此人。
  • 500:代码写烂了。
  • 502 :后端挂了;504:后端慢了。

希望这篇文章能帮你把 HTTP 状态码彻底搞懂!下次面试官再问,直接把原理拍他脸上!😎

相关推荐
mCell5 小时前
如何零成本搭建个人站点
前端·程序员·github
mCell6 小时前
为什么 Memo Code 先做 CLI:以及终端输入框到底有多难搞
前端·设计模式·agent
恋猫de小郭6 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
少云清7 小时前
【安全测试】2_客户端脚本安全测试 _XSS和CSRF
前端·xss·csrf
银烛木7 小时前
黑马程序员前端h5+css3
前端·css·css3
m0_607076607 小时前
CSS3 转换,快手前端面试经验,隔壁都馋哭了
前端·面试·css3
听海边涛声7 小时前
CSS3 图片模糊处理
前端·css·css3
IT、木易7 小时前
css3 backdrop-filter 在移动端 Safari 上导致渲染性能急剧下降的优化方案有哪些?
前端·css3·safari
0思必得07 小时前
[Web自动化] Selenium无头模式
前端·爬虫·selenium·自动化·web自动化
anOnion7 小时前
构建无障碍组件之Dialog Pattern
前端·html·交互设计