HTTP状态码

下面我将为你梳理一份全面的HTTP状态码指南,包括常问状态码分类精讲核心状态码常见问题以及回答技巧


一、 HTTP状态码五大类(必须掌握)

常会问:“说说你知道的HTTP状态码分类?” 你需要清晰地回答出5大类。

  1. 1xx (信息性状态码):表示请求已被接收,需要继续处理。

    • 常见码:100 Continue, 101 Switching Protocols
    • 面试点:通常不会深入问,但要知道它们的存在。
  2. 2xx (成功状态码):表示请求被服务器成功接收、理解并接受。

    • 常见码200 OK, 201 Created, 202 Accepted, 204 No Content, 206 Partial Content
    • 面试重点:这几个成功的状态码之间的区别是高频考点。
  3. 3xx (重定向状态码):表示需要客户端采取进一步的操作才能完成请求。

    • 常见码301 Moved Permanently, 302 Found, 304 Not Modified, 307 Temporary Redirect, 308 Permanent Redirect
    • 面试重点:重定向的区别,特别是301 vs 302,以及缓存相关的304
  4. 4xx (客户端错误状态码):表示客户端请求有错误,服务器无法处理。

    • 常见码400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed, 409 Conflict, 429 Too Many Requests
    • 面试重点:这是重中之重!特别是401 vs 403400的含义。
  5. 5xx (服务器端错误状态码):表示服务器处理请求时发生了错误。

    • 常见码500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
    • 面试重点502 vs 503 vs 504的区别,以及排查思路。

二、 核心状态码精讲与高频面试题

2xx 成功类

  • 200 OK

    • 描述:标准成功响应。对于GET请求,资源在响应体中返回;对于POST请求,结果在响应体中描述。
    • 面试题:“POST请求成功后一定返回201吗?” -> 不一定。如果只是在服务器上更新了数据,而没有创建新资源,返回200更合适。
  • 201 Created

    • 描述:请求成功,并且服务器创建了新的资源。通常是在POST或PUT请求之后。响应头Location字段应包含新资源的URI
    • 面试题:“什么时候用200,什么时候用201?” -> 创建了新资源且成功,用201;其他成功操作(如查询、更新)用200。
  • 204 No Content

    • 描述:服务器成功处理了请求,但不需要返回任何实体内容。例如,DELETE请求成功,或者表单提交后不需要跳转页面。
    • 面试题:“DELETE请求成功应该返回什么?” -> 理想情况是返回 204,表示资源已删除,没有内容返回。也可能返回200并带有一个状态描述。
  • 206 Partial Content

    • 描述:客户端进行了范围请求(通过Range头),服务器成功返回了部分内容。常用于大文件下载、断点续传。
    • 面试题:“如何实现断点续传?” -> 客户端发送带Range: bytes=500-999的请求,服务器返回206和对应的内容块。

3xx 重定向类

  • 301 Moved Permanently

    • 描述永久重定向。请求的资源已被永久移动到新位置。浏览器和搜索引擎会缓存这个重定向,下次直接访问新地址。
    • 面试题:“301和302有什么区别?” -> 这是经典问题。核心区别是浏览器是否缓存。301会缓存,302是临时的不缓存。
  • 302 Found

    • 描述临时重定向。请求的资源临时从不同的URI响应。浏览器不会缓存此重定向,下次请求可能还会走原地址。
    • 场景:未登录用户访问个人中心,临时重定向到登录页。
  • 304 Not Modified

    • 描述协商缓存生效。客户端发送带条件(如If-Modified-SinceIf-None-Match)的请求,服务器判断资源未修改,返回304,告诉浏览器直接使用本地缓存。
    • 面试题:“浏览器缓存机制是怎样的?” -> 在讲到强缓存和协商缓存时,304是协商缓存的关键状态码。

4xx 客户端错误类(重中之重)

  • 400 Bad Request

    • 描述通用客户端错误。服务器无法理解请求的格式,可能是请求体、参数、语法有误。这是一个笼统的错误码
    • 面试题:“400错误可能是什么原因?” -> JSON格式错误、缺少必要参数、参数类型不对等。
  • 401 Unauthorized

    • 描述未认证。请求需要用户认证。客户端需要提供认证信息(如Bearer Token)。如果已提供但仍报401,表示认证失败(如token无效/过期)。
    • 面试题:“401和403的区别?” -> 401是没登录(Authentication),403是登录了但没权限(Authorization)
  • 403 Forbidden

    • 描述禁止访问。服务器理解请求,但拒绝执行。与401不同,身份验证通常已成功,但用户没有访问该资源的权限。
    • 场景:普通用户尝试访问管理员后台。
  • 404 Not Found

    • 描述:服务器找不到请求的资源。也可能是服务器不想告诉你为什么拒绝,故意返回404。
  • 409 Conflict

    • 描述:请求与服务器当前状态冲突。通常发生在并发写操作中,例如基于旧版本数据更新资源时(版本冲突)。
  • 429 Too Many Requests

    • 描述请求过于频繁,触发了服务器的限流策略。响应头中通常会告知需要等待多长时间(Retry-After)。

5xx 服务器错误类

  • 500 Internal Server Error

    • 描述通用服务器错误。服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理。通常是后端代码bug(如空指针异常、数据库连接失败)。
  • 502 Bad Gateway

    • 描述:作为网关或代理的服务器,从上游服务器收到无效响应。常见于Nginx后端的应用服务器(如Tomcat)挂掉或无法连接。
    • 面试题:“502和504有什么区别?” -> 502是网关从上游收到无效响应(连接失败等);504是网关等待上游响应超时
  • 503 Service Unavailable

    • 描述:服务器当前无法处理请求(由于临时过载或维护)。通常意味着状况是临时的,客户端可以稍后重试。响应头可能包含Retry-After
  • 504 Gateway Timeout

    • 描述:作为网关或代理的服务器,未能及时从上游服务器收到响应。常见于某个接口处理时间过长,超过了Nginx配置的超时时间。

三、 常见面试问题汇总

  1. 基础概念

    • “HTTP状态码分为几类?每类的含义是什么?”
    • “请列举几个常见的2xx, 3xx, 4xx, 5xx状态码。”
  2. 对比分析

    • “301和302的区别是什么?对SEO有什么影响?”(301利于SEO权重的转移,302不利于
    • “401和403的区别是什么?”
    • “502、503、504的区别是什么?遇到这些错误应该如何排查?”
    • “200、201、204分别在什么场景下使用?”
    • “POST请求成功应该返回200还是201?”
  3. 场景应用题

    • “如果一个用户没有登录,访问一个需要权限的页面,应该返回什么状态码?”(401
    • “如果一个已登录的用户尝试访问他权限之外的资源,应该返回什么?”(403
    • “如何实现断点续传?会用到哪个状态码?”(206
    • “浏览器缓存机制中的304状态码是如何工作的?”
    • “你如何在前端或后端处理429状态码?”(实现重试机制,并遵循Retry-After

四、 回答技巧

  • 结构化回答:先总后分。例如被问到区别时,先说核心不同点(如301永久/302临时),再展开讲细节和影响(如浏览器缓存、SEO)。
  • 结合实战:不要只背概念。结合你项目中遇到的真实问题,比如“我们项目因为X原因出现过502,后来通过Y方式解决的”,这非常加分。
  • 知其所以然:解释状态码背后的设计意图和HTTP协议的原理,而不仅仅是数字和含义。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容