网络基础12 分钟阅读更新于 2026-07-30

HTTP 状态码怎么记:从 2xx 到 5xx 的排查思路

围绕HTTP 状态码与缓存章节,按 2xx、3xx、4xx、5xx 分类讲清常见状态码的含义和排查方向。

相关工具

状态码先看首位数字

HTTP 状态码不用一开始就背成号码表。真正排查问题时,先看首位数字就够判断方向:2xx 多数是成功,3xx 多数是重定向或缓存,4xx 多数是客户端请求有问题,5xx 多数是服务器处理失败。先分大类,再看具体数字,记起来会轻很多。

文中的状态码段落列了几个高频码:200、206、301、302、304、400、401、403、404、500、503。这些码覆盖了日常开发的大部分场景。页面能不能打开、接口为什么失败、缓存有没有命中、请求是不是被重定向,通常都能从这些状态码里找到第一条线索。

状态码不是最终答案。它只是服务器给客户端的处理结果提示。看到 404,不代表服务器宕机;看到 500,也不一定是网络问题;看到 200,也不保证业务一定成功。状态码要和响应头、响应体、请求方法、路径、认证信息一起看。

HTTP 状态码分类图,展示 1xx、2xx、3xx、4xx、5xx 的含义和常见状态码
HTTP 状态码分类

先看首位数字判断方向,再看具体状态码定位问题。

2xx:请求被服务器成功处理

`200 OK` 是最常见的成功状态码。它表示客户端请求已经被服务器成功接收、理解并处理。请求网页时,200 往往意味着服务器返回了页面内容;请求接口时,200 往往意味着 HTTP 层成功返回了响应。

但 200 不等于业务成功。很多接口会在 HTTP 状态码保持 200 的同时,在响应体里放业务码,比如 `code: 50001`、`success: false` 或错误 message。这种情况下,HTTP 层没问题,业务层仍然可能失败。调接口时要同时看状态码和响应体。

`206 Partial Content` 表示服务器已经正确处理了部分 GET 请求。文中提到,它常用于断点续传或分片下载,请求里通常会带 Range 请求头,告诉服务器客户端希望拿到哪一段资源。下载大文件、视频拖动进度条时,会比较容易遇到 206。

3xx:继续走下一步,或者直接用缓存

3xx 不是简单的失败,它表示客户端还需要进一步操作。`301` 是永久重定向,说明资源已经永久移动到新位置,将来访问应该使用新的 URL。`302` 是临时重定向,说明这次资源临时从另一个 URI 获取。

排查 301 和 302 时,要重点看响应头里的 `Location`。浏览器会自动跟随跳转,最终页面看起来正常,但中间可能已经跳了好几次。接口场景尤其要小心,有些客户端在不合适的重定向中可能改变请求方法,导致 POST 请求变成 GET,或者请求体丢失。

`304 Not Modified` 和缓存有关。文中讲协商缓存时提到,如果客户端带条件请求,服务器判断资源没有变化,就返回 304,响应通常不包含响应体,浏览器可以直接使用本地缓存。看到 304,不要以为服务器没返回内容是异常,它本来就是告诉你“用缓存”。

4xx:优先检查客户端请求

4xx 通常表示请求本身有问题,优先看客户端发了什么。`400 Bad Request` 表示请求报文语法有误,服务器无法识别。常见原因包括 JSON 格式错、参数类型错、Content-Type 和请求体不匹配。

`401 Unauthorized` 表示请求需要认证。这个码经常出现在 Token 没带、Cookie 失效、登录态过期时。`403 Forbidden` 表示请求对应的资源禁止访问。它和 401 不一样:401 更偏“你还没证明你是谁”,403 更偏“你是谁我知道,但你不能访问”。

`404 Not Found` 表示服务器无法找到对应资源。排查时先看路径是不是写错、路由有没有注册、环境域名是不是正确、网关转发路径有没有被改。不要看到 404 就去查数据库,很多 404 根本还没进入业务处理逻辑。

5xx:优先看服务端和依赖

`500 Internal Server Error` 表示服务器内部错误。它通常说明请求已经到达服务器,但服务在处理过程中出错了。原因可能是代码异常、参数没有兜住、数据库查询失败、模板渲染错误,也可能是某个内部依赖返回异常。

`503 Service Unavailable` 表示服务器暂时不可用,文中写成服务器正忙。常见场景包括服务过载、维护中、上游依赖不可用、网关限流或容器实例不足。503 不一定是代码 bug,也可能是容量和可用性问题。

排查 5xx 时,不要只盯浏览器。要看服务日志、网关日志、链路追踪、依赖服务状态和同一时间段的流量。500 和 503 给你的方向是服务端,但具体错误要靠日志和监控落地。

HTTP 状态码排查流程图,展示 2xx、3xx、4xx、5xx 的排查方向
看到状态码后怎么排查

状态码只能告诉你大方向,真正定位还要看请求、响应和服务日志。

304 要和缓存放在一起理解

304 是很多新手容易误判的状态码。它没有响应体,不是因为服务器坏了,而是服务器告诉浏览器:资源没变,你用本地缓存就行。相关的缓存章节里讲到 Last-Modified、If-Modified-Since、ETag、If-None-Match,都是协商缓存会用到的字段。

基于 Last-Modified 的协商缓存,会把资源最后修改时间放在响应头里。下次请求时,客户端带上 If-Modified-Since,服务器比较时间。如果资源没有变化,就返回 304;如果资源更新了,就返回 200 和新资源。

基于 ETag 的协商缓存,则是比较资源指纹。客户端下次请求带 If-None-Match,服务器拿它和当前 ETag 比较。匹配就返回 304,不匹配就返回新内容。ETag 更精确,但也会带来计算成本。缓存专题后面会展开,这里先知道 304 的含义:资源未修改,可以走缓存。

不要只看最终页面,要看第一跳

浏览器会自动跟随 301、302 等重定向,所以用户看到的最终页面,可能已经不是原始请求的响应。排查 URL、登录、HTTPS 跳转、旧域名迁移时,要尽量看第一跳响应:状态码是多少,Location 指向哪里,是否从 HTTP 跳到 HTTPS,是否带上了原路径和参数。

这在请求排查里也很常见。你以为接口返回了 HTML,其实第一跳是 302 到登录页,第二跳才返回登录页面的 HTML。前端把 HTML 当 JSON 解析,自然会报错。真正要修的不是 JSON 解析,而是认证或跳转逻辑。

站内已有重定向检查和 HTTP 状态码工具,适合把一条 URL 的跳转链拆出来看。对于线上问题,先把请求链路摊开,比直接猜代码更可靠。

一套实用记法

记状态码时,可以先记方向,再记代表码。2xx 看响应体和业务码,代表是 200、206。3xx 看 Location 和缓存,代表是 301、302、304。4xx 看请求方法、路径、参数、认证和权限,代表是 400、401、403、404。5xx 看服务日志、依赖和容量,代表是 500、503。

这套记法不追求一次背完所有号码。日常开发先把高频码用熟,遇到不熟的状态码再查文档。状态码的价值不在于让你背得多,而是让你第一时间知道往哪边查。

下一篇写 GET 和 POST 的区别,会继续沿着请求报文和状态码往下讲:同样是 HTTP 请求,为什么方法不同,参数位置、语义、缓存和使用习惯都会不同。

常见问题

状态码 200 就一定没有问题吗?

不一定。200 只代表 HTTP 层成功,业务层可能仍然在响应体里返回错误码或失败信息。

401 和 403 怎么区分?

401 更偏未认证或认证失效,403 更偏已经识别身份但没有权限访问。

304 没有响应体是不是异常?

通常不是。304 表示资源未修改,浏览器可以使用本地缓存,因此响应体通常为空。

计算机网络

继续阅读

返回专题