HTTP 状态码是服务器对客户端请求的响应状态标识,分为 5 大类(1xx-5xx),每类代表不同的响应场景。以下是常用常用状态码及其典型使用场景:
1xx:信息性状态码(临时响应)
表示服务器已接收请求,需要客户端继续操作。
- 100 Continue场景:客户端发送大请求(如上传文件)前,先询问服务器是否愿意接收。服务器返回此码表示 "可以继续发送"。
- 案例:当浏览器要上传一个大文件时,会先发送一个带有 Expect: 100-continue 头部的请求询问服务器是否愿意接收。服务器如果返回 100,浏览器才会开始上传文件体。
- 101 Switching Protocols场景:服务器根据客户端的请求切换协议(例如,切换到 WebSocket)。
- 案例:在网页游戏或聊天应用中,客户端发起一个 HTTP 请求要求升级到 WebSocket 协议,服务器同意后返回 101。
2xx:成功状态码
表示请求已被成功接收、理解并处理。
-
200 OK场景:最常见的成功响应,如 GET 请求获取数据成功。
-
案例:你在浏览器中输入 www.google.com 并成功打开谷歌首页,返回的就是 200 OK。
-
201 Created场景:POST 请求成功创建资源,如注册新用户、发布文章后,服务器返回 201 并通常附带新资源的 URL。
-
案例:你在一个博客平台点击“发布新文章”,服务器成功将文章保存到数据库后,通常会返回 201 Created。
-
204 No Content场景:请求成功但无返回内容,如 DELETE 请求删除资源成功,或 PUT 请求更新资源后无需返回数据。
-
案例:你点击网页上的“点赞”按钮,服务器记录了点赞操作,但不需要跳转页面或刷新内容,这时通常会返回 204。
3xx:重定向状态码
表示客户端需要进一步操作才能完成请求(通常是跳转)。
-
301 Moved Permanently场景:资源永久迁移,如旧域名切换到新域名,服务器返回 301 并指定新 URL,浏览器会缓存此跳转。
-
案例:网站更换了域名,从 http://example.com 永久迁移到了 https://www.example.com。访问旧地址时,服务器会返回 301,将你导向新地址。搜索引擎也会更新索引。
-
302 Found场景:资源临时迁移,如维护期间跳转到临时页面,浏览器不会缓存跳转(新版 HTTP 推荐用 307 替代)。
-
案例:你访问一个未登录用户才能看的页面,但系统检测到你已登录,于是临时将你重定向到个人主页。或者短链接服务,点击短链接后返回 302 跳转到真实的长网址。
-
304 Not Modified场景:缓存验证成功。客户端发送带缓存标识(如 ETag)的请求,服务器发现资源未修改,返回 304 让客户端使用本地缓存。
-
案例:你刷新一个网页,浏览器会问服务器:“我上次缓存的这个页面,如果它在某个时间点后没修改过,就直接告诉我用缓存吧。” 如果页面没变,服务器就返回 304,这样浏览器就从本地加载,大大加快了速度。
4xx:客户端错误状态码
表示请求存在错误(客户端原因)。
-
400 Bad Request场景:请求参数错误或格式无效,如提交表单时缺少必填字段、JSON 格式错误。
-
案例:你在一个注册表单的“年龄”栏里输入了“abc”而不是数字,点击提交后服务器无法解析,可能返回 400。
-
401 Unauthorized场景:请求需要身份验证(未登录),如访问需要登录的页面时,服务器返回 401 并提示登录。
-
案例:你尝试访问公司的内部管理后台,但没有登录,服务器会返回 401,并跳转到登录页面。
-
403 Forbidden场景:服务器拒绝请求(已登录但无权限),如普通用户尝试访问管理员后台。
-
案例:你作为一个普通用户,试图通过输入 URL 直接访问网站的管理员删除用户数据的接口,服务器会返回 403。
-
404 Not Found场景:请求的资源不存在,如访问不存在的 URL(例:
/page-that-doesnt-exist)。 -
案例:你点击了一个失效的链接,或者输入了一个错误的网址,就会看到“404 Not Found”页面。
-
405 Method Not Allowed场景:请求方法不被允许,如用 POST 访问只支持 GET 的接口。
-
案例:某网站提供一个 “查询商品详情” 的接口,设计初衷是仅支持 GET 方法(通过 URL 参数传递商品 ID,如
/api/product?id=123),服务器未开发该接口的 POST 处理逻辑。 -
429 Too Many Requests场景:客户端请求过于频繁,触发服务器限流策略(如 API 调用次数超限)。
-
案例:你使用脚本频繁调用某个网站的 API,超过了其规定的每分钟 60 次的限制,服务器会在一段时间内返回 429,禁止你继续访问。
5xx:服务器错误状态码
表示服务器处理请求时发生错误(服务器原因)。
-
500 Internal Server Error场景:服务器内部代码错误,如后端程序崩溃、数据库连接失败。
-
案例:网站的后端代码出现了 Bug(如空指针异常、数据库查询逻辑错误),导致服务器崩溃,就会返回 500。
-
502 Bad Gateway场景:服务器作为网关 / 代理时,收到上游服务器的无效响应(例:反向代理服务器无法连接到后端服务)。
-
案例:你的请求先到达一个负载均衡器(网关),负载均衡器再将请求转发给后端的某台应用服务器。如果这台应用服务器宕机或无响应,负载均衡器就会给你返回 502 错误。
-
503 Service Unavailable场景:服务器暂时不可用(如维护中),通常会附带
Retry-After头告知客户端何时重试。 -
案例:电商网站在“双十一”瞬间涌入巨大流量,服务器不堪重负,就会返回 503 页面,提示“服务暂不可用,请稍后再试”。
-
504 Gateway Timeout场景:服务器作为网关 / 代理时,上游服务器未及时响应(例:后端接口超时)。
-
案例:与 502 类似,但区别在于 504 是网关等待上游服务器响应超时了。比如,网关给应用服务器 10 秒时间处理请求,但应用服务器因为某个复杂查询 15 秒才返回,网关已经等不及了,就会向客户端返回 504。
典型场景示例
- 用户访问一个不存在的页面 → 服务器返回 404。
- 用户未登录却访问个人中心 → 服务器返回 401,并重定向到登录页。
- 客户端成功提交表单创建一篇文章 → 服务器返回 201,并返回新文章的 ID 和 URL。
- 服务器因维护暂时无法提供服务 → 返回 503,并提示 "1 小时后重试"。
- 浏览器使用缓存请求验证资源是否更新,资源未变 → 服务器返回 304,浏览器使用本地缓存。
理解状态码有助于快速定位前后端交互问题,是调试和接口设计的基础。
527

被折叠的 条评论
为什么被折叠?



