HTTP 状态码是服务器对客户端请求的响应标识,用于表示请求的处理结果
以下是完整的 HTTP 状态码分类和常见状态码详解:
一、状态码分类(5大类)
分类 | 范围 | 描述 | 常见场景 |
---|---|---|---|
1xx | 100-199 | 信息性响应 | 请求已被接收,继续处理 |
2xx | 200-299 | 成功响应 | 请求成功处理 |
3xx | 300-399 | 重定向响应 | 需要进一步操作 |
4xx | 400-499 | 客户端错误 | 请求包含错误 |
5xx | 500-599 | 服务器错误 | 服务器处理失败 |
二、必知状态码详解
1. 成功响应(2xx)
状态码 | 名称 | 描述 | 示例场景 |
---|---|---|---|
200 | OK | 请求成功,返回预期结果 | 获取资源成功(如网页、API数据) |
201 | Created | 资源创建成功(通常伴随Location头返回新资源地址) | 提交表单成功创建新用户 |
204 | No Content | 请求成功,但无返回内容 | 删除资源成功/OPTIONS预检请求 |
2. 重定向(3xx)
状态码 | 名称 | 描述 | 示例场景 |
---|---|---|---|
301 | Moved Permanently | 资源永久重定向(浏览器会缓存) | 网站改版后旧URL跳转到新URL |
302 | Found | 资源临时重定向(浏览器不缓存) | 登录后跳转到首页 |
304 | Not Modified | 资源未修改(缓存有效) | 协商缓存命中时返回 |
3. 客户端错误(4xx)
状态码 | 名称 | 描述 | 示例场景 |
---|---|---|---|
400 | Bad Request | 请求语法错误或参数无效 | 必填参数未传/JSON格式错误 |
401 | Unauthorized | 未认证(需提供身份凭证) | 未登录访问需要权限的API |
403 | Forbidden | 服务器拒绝执行(权限不足) | 普通用户尝试访问管理员接口 |
404 | Not Found | 资源不存在 | 访问不存在的URL |
429 | Too Many Requests | 请求过于频繁 | API限流触发 |
4. 服务器错误(5xx)
状态码 | 名称 | 描述 | 示例场景 |
---|---|---|---|
500 | Internal Server Error | 服务器内部错误(无具体信息) | 代码抛出未捕获的异常 |
502 | Bad Gateway | 网关/代理服务器从上游收到无效响应 | Nginx反向代理的后端服务崩溃 |
503 | Service Unavailable | 服务不可用(临时过载或维护) | 服务器维护页面 |
504 | Gateway Timeout | 网关超时(上游服务器未及时响应) | 后端数据库查询超时 |
三、特殊状态码
状态码 | 名称 | 用途 |
---|---|---|
101 | Switching Protocols | 协议切换(如WebSocket握手) |
206 | Partial Content | 分块传输(用于大文件断点续传) |
418 | I'm a teapot | 彩蛋状态码(RFC 2324) |
四、状态码决策树 
五、最佳实践
-
前端处理建议:
-
2xx:正常处理数据
-
401:跳转到登录页
-
403:显示"无权访问"提示
-
404:显示友好错误页
-
5xx:建议用户稍后重试
-
-
后端设计原则:
-
4xx表示客户端问题,响应中应包含
error_details
-
5xx表示服务端问题,避免暴露内部错误信息
-
-
调试技巧:
// 在fetch/axios中拦截状态码
fetch(url).then(res => {if (!res.ok) throw new Error(`${res.status}: ${res.statusText}`);return res.json();})