HTTP 常见状态码详解
HTTP 状态码是服务器对客户端请求的处理结果的数字标识,通过三位数字的编码直观反映请求的状态(如成功、错误、重定向等)。理解状态码不仅能帮助开发者快速定位问题,还能优化用户体验(如根据状态码引导用户操作)。以下是对各类状态码的详细解析:
1XX 信息性状态码(临时响应)
1XX 状态码表示服务器已接收请求,正在进一步处理,需要客户端继续等待或配合。这类状态码很少直接暴露给用户,主要用于协议层面的中间交互。
状态码 | 含义 | 典型场景 |
---|---|---|
100 Continue | 服务器已接收请求头,允许客户端继续发送请求体 | 客户端发送大型数据(如文件上传)前,先发送请求头试探服务器是否接受,服务器返回 100 后客户端再发送主体 |
101 Switching Protocols | 服务器同意切换到客户端请求的协议(如 HTTP/2、WebSocket) | 客户端通过Upgrade 首部请求升级协议(如Upgrade: websocket ),服务器确认后返回 101 并切换协议 |
2XX 成功状态码
2XX 状态码表示客户端请求被服务器成功接收并处理,是最理想的响应结果。
状态码 | 含义 | 典型场景 |
---|---|---|
200 OK | 请求成功,服务器返回对应资源 | 普通的 GET 请求(如打开网页、获取 API 数据) |
201 Created | 请求成功且创建了新资源 | POST 请求创建资源(如注册用户、发布文章),响应体通常包含新资源的详情 |
202 Accepted | 请求已接收,但尚未处理完成 | 异步任务(如批量数据处理、邮件发送),服务器先确认接收,后续通过其他方式通知结果 |
204 No Content | 请求成功,但无响应体 | DELETE 请求删除资源(无需返回数据),或 PUT 请求更新资源后无需返回内容 |
206 Partial Content | 服务器成功处理部分请求(范围请求) | 客户端通过Range 首部请求资源的部分内容(如断点续传、大文件分片下载),响应体包含指定范围的数据 |
3XX 重定向状态码
3XX 状态码表示客户端需要通过进一步操作(如跳转至新地址)才能完成请求,浏览器通常会自动处理重定向。
状态码 | 含义 | 典型场景 | 与类似状态码的区别 |
---|---|---|---|
301 Moved Permanently | 资源永久迁移到新 URI | 网站域名更换(如old.com 迁移到new.com ),搜索引擎会更新索引,浏览器会缓存新地址 |
与 302 相比,301 是 “永久” 重定向,会更新书签和搜索引擎索引 |
302 Found | 资源临时迁移到新 URI | 临时活动页面跳转(如促销活动结束后会恢复原地址),浏览器不更新书签 | 实际使用中可能将 POST 请求转为 GET,不符合标准;307 则严格遵守方法不变 |
304 Not Modified | 资源未修改,使用缓存 | 客户端请求的资源在缓存有效期内,服务器无需返回资源,直接告知使用本地缓存 | 配合If-Modified-Since 或ETag 首部使用,减少重复传输,提升性能 |
307 Temporary Redirect | 临时重定向(严格遵守请求方法) | 临时跳转且需保持请求方法(如 POST 请求跳转后仍为 POST) | 与 302 的区别:307 不会将 POST 转为 GET,适合需要保留方法的场景 |
4XX 客户端错误状态码
4XX 状态码表示请求存在错误(如语法错误、权限不足),导致服务器无法处理,责任在客户端。
状态码 | 含义 | 典型场景 | 解决思路 |
---|---|---|---|
400 Bad Request | 请求报文格式错误(如 JSON 语法错误) | 客户端发送的参数格式有误(如 API 请求的 JSON 缺少必要字段) | 检查请求参数格式,确保符合服务器要求 |
401 Unauthorized | 请求需要身份认证 | 访问需要登录的页面或 API(如未登录时访问个人中心) | 引导用户登录,或在请求中携带认证信息(如 Token) |
403 Forbidden | 服务器拒绝访问(认证通过但无权限) | 普通用户尝试访问管理员页面,或 IP 被封禁 | 检查用户权限,确认是否在允许访问的范围内 |
404 Not Found | 服务器找不到请求的资源 | 访问不存在的 URL(如输错网址、资源已删除但链接未更新) | 检查 URL 是否正确,或跳转至 404 友好页面 |
405 Method Not Allowed | 请求方法不支持 | 用 POST 访问仅支持 GET 的接口,或用 DELETE 访问只读资源 | 确认接口支持的方法(如通过 OPTIONS 请求查询),改用正确的方法 |
408 Request Timeout | 请求超时 | 客户端发送请求过慢,或网络延迟过高 | 优化网络环境,减少请求数据量,或延长服务器超时时间 |
413 Request Entity Too Large | 请求体过大 | 上传的文件超过服务器限制(如超过 100MB) | 压缩文件大小,或分块上传 |
414 Request-URI Too Long | 请求 URL 过长 | GET 请求的参数过多(如拼接了大量查询条件) | 将参数移至请求体(改用 POST),或简化参数 |
5XX 服务器错误状态码
5XX 状态码表示服务器在处理请求时发生内部错误,责任在服务器。
状态码 | 含义 | 典型场景 | 解决思路 |
---|---|---|---|
500 Internal Server Error | 服务器内部错误(如代码 bug) | 服务器处理请求时抛出异常(如数据库连接失败、代码逻辑错误) | 开发者检查服务器日志,修复代码或配置问题 |
502 Bad Gateway | 网关收到上游服务器的无效响应 | 反向代理服务器(如 Nginx)无法连接后端应用服务器(如 Tomcat 崩溃) | 检查后端服务是否正常运行,重启服务或修复网络 |
503 Service Unavailable | 服务器暂时无法处理请求(如维护、超载) | 网站高峰期服务器负载过高,或正在进行停机维护 | 等待服务器恢复,或通过负载均衡分散流量 |
504 Gateway Timeout | 网关等待上游服务器响应超时 | 后端服务处理请求耗时过长(如复杂查询超时) |
v1.3.10