飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • HTTP 基础

    • 认识HTTP协议与应用层定位
    • HTTP消息格式与报文结构
    • HTTP请求方法与幂等性
    • HTTP状态码详解
  • 连接与缓存

    • HTTP持久连接与版本演进
    • HTTP缓存机制
  • 状态与协商

    • Cookie与Session状态管理
    • HTTP重定向与内容协商
    • HTTP条件请求与范围请求
  • 安全与加密

    • HTTP认证机制
    • HTTPS与TLS握手
  • 协议演进

    • HTTP2核心特性
    • HTTP3与QUIC
  • 架构与实战

    • HTTP代理服务器与Web缓存
    • HTTP常见攻击与防御
    • HTTP实践工具与抓包分析

HTTP状态码详解

概念引入

想象你去飞翔公司办事:

  • 前台微笑着说"请上 18 楼"——这是成功(2xx)
  • 前台说"人事部已搬到 20 楼,请去那边"——这是重定向(3xx)
  • 保安拦住你"没有工牌不能进"——这是客户端错误(4xx)
  • 电梯坏了"请稍后再来"——这是服务器错误(5xx)

HTTP 状态码(Status Code) 就是服务器给客户端的"办事结果通知单",用三位数字精确告知请求的处理结果。读懂状态码,就像读懂前台的暗示——能快速定位问题所在。


核心内容

状态码五大分类

分类范围含义飞翔公司场景
1xx 信息100~199请求已收到,继续处理服务器说"收到,请继续发送剩余数据"
2xx 成功200~299请求已成功处理航仔查到工资条,页面正常显示
3xx 重定向300~399需要进一步操作(通常自动跳转)官网旧地址自动跳转到新域名
4xx 客户端错误400~499请求有问题,客户端需修正波比填错表单,鸣哥访问不存在的页面
5xx 服务器错误500~599服务器内部出错凌叔的服务器宕机,翼王的架构扛不住流量

常见状态码详解

2xx 成功类

状态码含义说明飞翔公司场景
200 OK请求成功最常见,一切正常空少打开官网首页,页面完美加载
201 Created已创建资源创建成功波比提交活动申请,系统生成新记录
204 No Content无内容成功但无返回体云吞删除一条社群公告,无需返回数据

3xx 重定向类

状态码含义说明飞翔公司场景
301 Moved Permanently永久重定向资源已永久搬家,SEO 权重转移官网从 old.feixiang.net 永久迁移到 www.feixiang.net
302 Found临时重定向资源临时在别处,SEO 权重不转移活动期间临时跳转到活动页面,活动结束后恢复
304 Not Modified未修改缓存有效,用本地副本空少刷新页面,CSS 文件没变化,浏览器直接用缓存

301 vs 302 关键区别:301 是"房子卖了,永远住新地址",搜索引擎会更新索引;302 是"出差住酒店,过几天还回来",搜索引擎保留原地址。

4xx 客户端错误类

状态码含义说明飞翔公司场景
400 Bad Request请求语法错误服务器看不懂你在说什么波比提交的 JSON 少了一个逗号,服务器解析失败
401 Unauthorized未认证需要登录,但没提供凭证雁姐没登录就想看用户数据,被系统拦住
403 Forbidden禁止访问已登录,但权限不足星宇(产品助理)想访问翼王的架构设计文档,权限不够
404 Not Found资源不存在URL 写错或资源已删除鸣哥访问了一篇已删除的旧文章

401 vs 403 关键区别:401 是"没出示证件"(未认证),403 是"出示了证件但不让进"(已认证但无权限)。就像公司大门:401 = 忘带工牌;403 = 你是访客但想进机房。

5xx 服务器错误类

状态码含义说明飞翔公司场景
500 Internal Server Error内部服务器错误服务器自己出 bug 了航仔的代码抛了空指针异常
502 Bad Gateway网关错误上游服务器无响应凌叔重启了后端服务,Nginx 暂时连不上
503 Service Unavailable服务不可用服务器过载或维护中年中大促流量暴增,服务器扛不住了

服务器决策流程图

当飞翔公司的服务器收到一个请求时,内部判断逻辑如下:

飞翔公司场景化错误示例

304 Not Modified 与缓存

304 是缓存机制的关键角色。当浏览器再次请求一个资源时,会带上上次收到的 Last-Modified 或 ETag 信息。服务器发现资源没变化,就返回 304,告诉浏览器"用你本地的缓存就行"。

首次请求再次请求(带缓存标记)服务器响应
GET /style.cssGET /style.css
If-Modified-Since: Mon, 01 Jun 2026
304 Not Modified(无实体主体)

飞翔公司场景:空少刷新飞翔官网,logo.png 和 main.css 都返回 304,页面秒开,省流量又省服务器带宽。凌叔在 Nginx 里配好缓存策略,服务器压力小了一半。


本篇小结

  • HTTP 状态码分五大类:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误
  • 200 是成功标配;201 表示创建成功;204 表示成功但无返回体
  • 301 永久重定向(SEO 权重转移),302 临时重定向(保留原地址)
  • 401 是"未认证"(没登录),403 是"无权限"(已登录但不让进)
  • 404 资源不存在;400 请求格式错误
  • 500 服务器内部错误;502 网关上游异常;503 服务过载或维护
  • 304 表示缓存有效,浏览器可直接使用本地副本

动手实践

温馨提示: 以下实践示例中涉及的域名(如 www.feixiang.net)、公司场景和接口均为虚构数据,仅用于演示协议原理,实际执行时可能不会产生文档中描述的效果。建议将命令中的域名替换为你自己可访问的真实地址进行练习。

实践:用 curl 观察不同状态码

# 200 OK
curl -I http://www.feixiang.net

# 301/302 重定向(-L 跟随跳转,-I 只看头)
curl -IL http://feixiang.net

# 404 Not Found(访问不存在的页面)
curl -I http://www.feixiang.net/this-page-does-not-exist

# 观察 304 缓存(需要配合缓存头,首次请求)
curl -I http://www.feixiang.net/static/logo.png

实践:用浏览器开发者工具观察状态码

  1. 打开 Chrome,按 F12 进入 Network 面板
  2. 访问 www.feixiang.net
  3. 刷新页面,观察第二次请求中 style.css、logo.png 等文件的状态码是否变成 304
  4. 点击某个请求,查看 Response Headers 中的 Status Code 和 Cache-Control

实践:思考题

  1. 如果飞翔公司把官网从 http://feixiang.net 永久迁移到 https://www.feixiang.net,应该返回 301 还是 302?为什么?
  2. 波比访问内部系统时遇到 403,他应该怎么排查?(提示:对比 401 和 403 的区别)
  3. 凌叔发现服务器频繁返回 502,可能是什么原因?他应该检查哪些环节?
  4. 设计一个场景:星宇在飞翔 OA 系统中依次遇到 401 → 登录后遇到 403 → 找翼王开通权限后最终看到 200。用一段话描述这个完整过程。

查看思考题答案

上一页
HTTP请求方法与幂等性