HTTP状态码及场景

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。

典型场景示例

  1. 用户访问一个不存在的页面 → 服务器返回 404
  2. 用户未登录却访问个人中心 → 服务器返回 401,并重定向到登录页。
  3. 客户端成功提交表单创建一篇文章 → 服务器返回 201,并返回新文章的 ID 和 URL。
  4. 服务器因维护暂时无法提供服务 → 返回 503,并提示 "1 小时后重试"。
  5. 浏览器使用缓存请求验证资源是否更新,资源未变 → 服务器返回 304,浏览器使用本地缓存。

理解状态码有助于快速定位前后端交互问题,是调试和接口设计的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值