下面我将为你梳理一份全面的HTTP状态码指南,包括常问状态码分类、精讲核心状态码、常见问题以及回答技巧。
一、 HTTP状态码五大类(必须掌握)
常会问:“说说你知道的HTTP状态码分类?” 你需要清晰地回答出5大类。
-
1xx (信息性状态码):表示请求已被接收,需要继续处理。
- 常见码:100 Continue, 101 Switching Protocols
- 面试点:通常不会深入问,但要知道它们的存在。
-
2xx (成功状态码):表示请求被服务器成功接收、理解并接受。
- 常见码:200 OK, 201 Created, 202 Accepted, 204 No Content, 206 Partial Content
- 面试重点:这几个成功的状态码之间的区别是高频考点。
-
3xx (重定向状态码):表示需要客户端采取进一步的操作才能完成请求。
- 常见码:301 Moved Permanently, 302 Found, 304 Not Modified, 307 Temporary Redirect, 308 Permanent Redirect
- 面试重点:重定向的区别,特别是301 vs 302,以及缓存相关的304。
-
4xx (客户端错误状态码):表示客户端请求有错误,服务器无法处理。
- 常见码:400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed, 409 Conflict, 429 Too Many Requests
- 面试重点:这是重中之重!特别是401 vs 403,400的含义。
-
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-Since
或If-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配置的超时时间。
三、 常见面试问题汇总
-
基础概念:
- “HTTP状态码分为几类?每类的含义是什么?”
- “请列举几个常见的2xx, 3xx, 4xx, 5xx状态码。”
-
对比分析:
- “301和302的区别是什么?对SEO有什么影响?”(301利于SEO权重的转移,302不利于)
- “401和403的区别是什么?”
- “502、503、504的区别是什么?遇到这些错误应该如何排查?”
- “200、201、204分别在什么场景下使用?”
- “POST请求成功应该返回200还是201?”
-
场景应用题:
- “如果一个用户没有登录,访问一个需要权限的页面,应该返回什么状态码?”(401)
- “如果一个已登录的用户尝试访问他权限之外的资源,应该返回什么?”(403)
- “如何实现断点续传?会用到哪个状态码?”(206)
- “浏览器缓存机制中的304状态码是如何工作的?”
- “你如何在前端或后端处理429状态码?”(实现重试机制,并遵循
Retry-After
头)
四、 回答技巧
- 结构化回答:先总后分。例如被问到区别时,先说核心不同点(如301永久/302临时),再展开讲细节和影响(如浏览器缓存、SEO)。
- 结合实战:不要只背概念。结合你项目中遇到的真实问题,比如“我们项目因为X原因出现过502,后来通过Y方式解决的”,这非常加分。
- 知其所以然:解释状态码背后的设计意图和HTTP协议的原理,而不仅仅是数字和含义。