HTTP状态码全解析
一、状态码分类速览
类别 | 范围 | 含义(类比) | 常见状态码举例 |
---|---|---|---|
1xx | 100-199 | 信息性状态(中场休息) | 100 Continue |
2xx | 200-299 | 成功(任务完成) | 200 OK, 201 Created |
3xx | 300-399 | 重定向(换个地方) | 301 Moved Permanently, 304 Not Modified |
4xx | 400-499 | 客户端错误(你搞砸了) | 404 Not Found, 403 Forbidden |
5xx | 500-599 | 服务器错误(我搞砸了) | 500 Internal Server Error, 502 Bad Gateway |
二、常见状态码详解(含底层原理)
状态码 | 名称 | 含义(场景类比) | 底层原理 |
---|---|---|---|
200 | OK | 一切正常(服务员:您的菜来啦!) | 服务器成功处理请求并返回数据,请求-响应循环完成。 |
201 | Created | 资源创建成功(服务员:您的预订已确认!) | 服务器根据请求创建了新资源(如POST创建用户),返回新资源的URL。 |
301 | Moved Permanently | 永久重定向(服务员:本店已搬到隔壁!) | 资源永久移动到新URL,浏览器会缓存重定向,下次直接访问新地址。 |
304 | Not Modified | 资源未修改(服务员:菜还是老样子!) | 客户端有缓存,服务器检查后发现资源未更新,让客户端用缓存版本。 |
400 | Bad Request | 请求格式错误(服务员:菜单写错啦!) | 服务器无法解析请求(如JSON格式错误),请求参数有问题。 |
401 | Unauthorized | 未授权(服务员:请先出示会员卡!) | 请求需要身份验证(如未登录访问需要权限的页面),需提供凭证。 |
403 | Forbidden | 禁止访问(服务员:本店不接待您!) | 服务器理解请求,但拒绝执行(如无权限访问),与401的区别是已认证但仍拒绝。 |
404 | Not Found | 资源不存在(服务员:菜单上没这道菜!) | 请求的资源(如URL、文件)不存在,服务器无法找到。 |
429 | Too Many Requests | 请求过多(服务员:您点单太快啦!) | 客户端短时间发送太多请求,触发限流(如API调用频率限制)。 |
500 | Internal Server Error | 服务器内部错误(服务员:厨师突然罢工!) | 服务器处理请求时发生意外错误(如代码崩溃、数据库连接失败)。 |
502 | Bad Gateway | 网关错误(服务员:传菜员摔了!) | 服务器(如Nginx)作为代理时,从上游服务器(如PHP-FPM)收到无效响应。 |
503 | Service Unavailable | 服务不可用(服务员:本店正在装修!) | 服务器暂时过载或维护中,无法处理请求。 |
504 | Gateway Timeout | 网关超时(服务员:菜做了1小时还没好!) | 服务器作为代理时,等待上游服务器响应超时(如PHP脚本执行时间过长)。 |
三、状态码底层原理总结
-
客户端-服务器模型:
- HTTP是“请求-响应”协议,状态码是服务器返回给客户端的“处理结果”。
-
分层架构影响:
- 4xx错误通常由客户端(如浏览器、APP)触发;
- 5xx错误通常由服务器或中间件(如Nginx、PHP-FPM)触发。
-
协议设计逻辑:
- 状态码的三位数字中,第一位表示类别,后两位细化具体场景,便于程序自动处理。
-
缓存与重定向机制:
- 304状态码依赖客户端与服务器的“协商缓存”(如ETag、Last-Modified);
- 301/302重定向通过响应头中的
Location
字段实现地址跳转。
四、一句话记忆法
- 2xx:✅ 成了!
- 3xx:👉 换地方!
- 4xx:🙅♀️ 你的问题!
- 5xx:🙅♂️ 我的问题!
下次遇到状态码,先看第一位数字,再对应表格找具体原因,秒懂! 🚀