Menu

HTTP 状态码

可搜索的 HTTP 状态码大全,每个都有通俗易懂的解释。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

HTTP 状态码是什么?

HTTP 状态码是服务器在每个响应开头返回的三位数字,用来概括请求的结果。浏览器、客户端、代理和 CDN 都靠它来决定是缓存、重定向、重试,还是把错误显示给用户。

每个状态码都按第一位数字归入五类之一:1xx 信息,2xx 成功,3xx 重定向,4xx 客户端错误,5xx 服务器错误。知道了类别,不用查具体的状态码,通常也能猜出大致含义。

大多数应用只用到一小部分核心状态码(200、201、204、301、302、304、400、401、403、404、409、422、429、500、502、503)。弄清每个状态码的含义,以及 401 Unauthorized 和 403 Forbidden、301 Moved Permanently 和 302 Found 之间的区别,会让你成为更出色的后端或 API 开发者。

使用这份速查表时你会学到什么

  • 第一位数字总是代表类别:1xx 信息,2xx 成功,3xx 重定向,4xx 客户端错误,5xx 服务器错误。
  • 状态码是 API 约定的一部分:客户端应该根据状态码做分支判断,而不是从响应体里解析错误信息。
  • 4xx 表示客户端出了错(输入有误、缺少身份验证、资源不存在)。5xx 表示无论客户端做了什么,服务器都处理失败了。
  • 有些状态码之间差别很细:401 vs 403、301 vs 308、200 vs 204,这些区别会影响缓存和重试。

如何一步步使用状态码速查表

  1. 按状态码或名称搜索

    输入数字(404、429)或关键词(auth、redirect、rate limit),匹配的状态码会实时筛选出来。

  2. 按类别筛选

    随便浏览而不是搜索时,可以用类别标签(1xx、2xx、3xx、4xx、5xx)缩小列表范围。

  3. 阅读通俗的说明

    每个条目都写明了该状态码何时发送、客户端通常如何处理,以及最常见的原因。

  4. 对比相关的状态码

    借助容易混淆的状态码之间的“另见”链接(401 vs 403、301 vs 302),为你的 API 选出合适的那个。

HTTP 状态码的类别

HTTP 状态码的五个类别及其含义一览。由 RFC 9110 定义,并登记在 IANA HTTP 状态码注册表中。

类别含义常见状态码
1xx 信息请求已收到,正在处理100, 101, 103
2xx 成功请求成功200, 201, 204, 206
3xx 重定向去别处找301, 302, 304, 307, 308
4xx 客户端错误请求本身有问题400, 401, 403, 404, 409, 422, 429
5xx 服务器错误服务器未能完成一个有效的请求500, 502, 503, 504

需要了解的常见 HTTP 状态码

200 OK vs 201 Created vs 204 No Content

200 OK

标准的“一切正常”响应,带有响应体。

201 Created

请求成功创建了一个新资源,通常出现在 POST 之后。

204 No Content

成功,但没有响应体。常见于不需要返回数据的 DELETE 或 PUT 调用之后。

三者都是成功状态码,区别在于响应里带了什么。201 应该包含一个指向新资源的 Location 头;204 按定义就是空的。

301 Moved Permanently vs 302 Found

301

永久重定向。浏览器和搜索引擎会记住它,旧 URL 实际上就作废了。

302

临时重定向。浏览器每次请求都会重新检查原始 URL,书签仍指向旧 URL。

资源真的搬家了(品牌更名、URL 结构调整)时用 301。短期的重定向,比如 A/B 测试、登录跳转或维护页面,用 302。

401 Unauthorized vs 403 Forbidden

401

你没有通过身份验证。服务器不知道你是谁。

403

服务器知道你是谁,但你没有访问这个资源的权限。

如果换一套凭据可能就能解决,返回 401。如果什么凭据都没用(这个资源就是不对该用户开放),返回 403。

500 vs 502 vs 503 vs 504

500

通用的服务器错误:你的代码抛出了一个未处理的异常。

502

网关错误:前面的代理(CDN、负载均衡器)连不上上游服务器。

503

服务不可用:服务器在运行,但负载过高或正处于维护模式。

504

网关超时:代理连上了上游,但没有及时收到响应。

四个都是服务器错误,但给调试者的线索截然不同。500 指向你的应用;502 和 504 指向网络链路;503 指向容量问题。

常见的 HTTP 状态码错误

  • 返回 200 OK,却在响应体里放 {"error": "..."}。状态码是约定的一部分,要用对(400、404、500),客户端才能据此做分支判断。
  • 用 401 表示权限错误。401 针对的是身份验证;拒绝访问应该用 403。
  • 新建资源时返回 200,而不是带 Location 头的 201。
  • 对未授权的访问返回 404。这样能防止别人探测资源是否存在,但也会让本来有权限的客户端摸不着头脑。403 通常更清楚。
  • 把 429 Too Many Requests 和 503 Service Unavailable 搞混。针对单个客户端的限流用 429,整体过载用 503。

HTTP 状态码常见问题

HTTP 404 是什么意思?
404 Not Found 表示服务器理解了请求,但该 URL 对应的资源不存在。最常见的原因是路径错误、资源已被删除,或者 URL 拼错了。
401 和 403 有什么区别?
401 Unauthorized 表示你没有通过身份验证,服务器不知道你是谁。403 Forbidden 表示你已通过身份验证,但没有访问该资源的权限。换一套凭据也许能解决 401,但解决不了 403。
301 和 302 有什么区别?
301 Moved Permanently 是永久重定向,浏览器和搜索引擎会更新记录。302 Found 是临时重定向,客户端之后仍会访问原来的 URL。永久迁移用 301,临时绕道用 302。
HTTP 500 是什么意思?
500 Internal Server Error 是一个通用的服务器端错误,通常在未处理的异常一路冒泡上来时抛出。客户端没做错任何事,是你的服务器没能处理一个有效的请求。
应该总是使用具体的状态码吗?
是的。失败时也返回笼统的 200 OK,或者出什么错都返回 500,会让 API 更难用。选最贴切的那个状态码:客户端、代理、监控和重试逻辑都要根据状态码做分支判断。
HTTP 429 是什么意思?
当客户端触发了限流时,服务器会返回 429 Too Many Requests。响应中应该包含一个 Retry-After 头,告诉客户端什么时候可以安全地重试。
HTTP 403 Forbidden 是什么意思?
403 Forbidden 表示服务器理解了请求,也知道你是谁,但拒绝让你访问该资源。和 401 不同,重新登录也没用:你的账号就是没有权限。常见原因包括缺少角色或权限范围、IP 白名单限制,或者资源是其他用户私有的。
HTTP 502 Bad Gateway 是什么意思?
502 Bad Gateway 表示充当代理或网关的服务器(CDN、负载均衡器或反向代理)把你的请求转发给上游服务器后,收到了无效或空的响应。它通常说明后端宕机、崩溃或配置有误,而不是你的请求有问题。
HTTP 状态码一共有多少个?

共有五个类别(1xx 至 5xx),在 IANA 登记的标准状态码大约有 60 个,不过大多数很少用到。实际的日常 Web 和 API 开发中,常用的核心状态码大约 15 到 20 个:200、201、204、301、302、304、400、401、403、404、409、422、429、500、502 和 503。上方可搜索的列表收录了所有标准状态码,并配有通俗的说明。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始