HTTP响应状态码完整详解

HTTP响应状态码是服务器对客户端请求的回应,分为5个大类,由三位数字组成,第一位数字定义了响应的类别。

一、状态码分类总览

类别 含义 说明
1xx 信息性 服务器已收到请求,需要客户端继续操作
2xx 成功 请求已成功被服务器接收、理解并处理
3xx 重定向 需要客户端进一步操作才能完成请求
4xx 客户端错误 请求包含语法错误或无法被服务器执行
5xx 服务器错误 服务器在处理请求过程中发生了错误

二、1xx 信息性响应(Informational)

这类状态码表示临时响应,仅包含状态行和某些可选的响应头,不包含响应体。

100 Continue

  • 含义:继续
  • 说明:服务器已收到请求头,客户端应继续发送请求体
  • 使用场景:客户端发送Expect: 100-continue请求头时,服务器返回此状态码表示可以继续发送请求体
  • 注意:如果服务器已经收到请求体,则不需要返回此状态码

101 Switching Protocols

  • 含义:切换协议
  • 说明:服务器已理解客户端的协议切换请求,并将切换到请求的协议
  • 使用场景:WebSocket升级(Upgrade: websocket)、HTTP/2升级

102 Processing (WebDAV)

  • 含义:处理中
  • 说明:服务器已收到并正在处理请求,但尚未完成
  • 使用场景:WebDAV的复杂操作,防止客户端超时

103 Early Hints

  • 含义:早期提示
  • 说明:服务器在最终响应之前,提前发送一些响应头
  • 使用场景:提前告知客户端预加载资源,提升页面加载速度
  • 注意:HTTP/2和HTTP/3支持,HTTP/1.1不支持

三、2xx 成功响应(Successful)

这类状态码表示请求已成功处理。

200 OK

  • 含义:成功
  • 说明:请求已成功处理,响应体包含请求的资源
  • 使用场景:GET、POST、PUT、DELETE等请求成功时的标准响应

201 Created

  • 含义:已创建
  • 说明:请求成功,并且服务器创建了新的资源
  • 使用场景:POST或PUT请求创建资源成功
  • 注意:响应头中应包含Location字段,指向新创建的资源URI

202 Accepted

  • 含义:已接受
  • 说明:服务器已接受请求,但尚未处理
  • 使用场景:异步处理任务,如批量操作、后台任务
  • 注意:不保证请求最终会被成功处理

203 Non-Authoritative Information

  • 含义:非权威信息
  • 说明:服务器已成功处理请求,但返回的元信息不是来自原始服务器
  • 使用场景:代理服务器返回的缓存或转换后的资源

204 No Content

  • 含义:无内容
  • 说明:服务器已成功处理请求,但没有返回任何内容
  • 使用场景:DELETE请求成功、PUT更新成功但不需要返回内容
  • 注意:响应体必须为空,但响应头可以包含有用信息

205 Reset Content

  • 含义:重置内容
  • 说明:服务器已成功处理请求,客户端应重置文档视图
  • 使用场景:表单提交后,要求客户端清空表单

206 Partial Content

  • 含义:部分内容
  • 说明:服务器成功处理了部分GET请求
  • 使用场景:断点续传、分块下载
  • 注意:响应头中必须包含Content-Range字段,指示返回的字节范围

207 Multi-Status (WebDAV)

  • 含义:多状态
  • 说明:返回多个独立操作的状态信息
  • 使用场景:WebDAV的批量操作

208 Already Reported (WebDAV)

  • 含义:已报告
  • 说明:在多状态响应中,避免重复报告相同的资源状态

226 IM Used

  • 含义:已使用实例操作
  • 说明:服务器已完成对资源的GET请求,并应用了一个或多个实例操作

四、3xx 重定向(Redirection)

这类状态码表示客户端需要进行额外操作才能完成请求。

300 Multiple Choices

  • 含义:多种选择
  • 说明:请求的资源有多个表示形式,客户端可以选择其中一个
  • 使用场景:资源有多种语言或格式版本

301 Moved Permanently

  • 含义:永久移动
  • 说明:请求的资源已永久移动到新的URI
  • 使用场景:网站域名变更、URL结构永久调整
  • 注意:搜索引擎会将旧URL的权重转移到新URL

302 Found

  • 含义:临时移动
  • 说明:请求的资源临时移动到新的URI
  • 使用场景:临时页面跳转、登录后跳转
  • 注意:搜索引擎不会转移权重,旧URL仍然有效

303 See Other

  • 含义:查看其他位置
  • 说明:服务器返回此状态码,指示客户端使用GET方法请求另一个URI
  • 使用场景:POST请求成功后,重定向到结果页面
  • 注意:与302的区别是,303明确要求使用GET方法请求新URI

304 Not Modified

  • 含义:未修改
  • 说明:资源自上次请求后未发生变化
  • 使用场景:客户端发送条件请求(If-Modified-SinceIf-None-Match)时,资源未修改
  • 注意:响应体必须为空,响应头中应包含缓存相关信息

305 Use Proxy

  • 含义:使用代理
  • 说明:请求的资源必须通过指定的代理访问
  • 使用场景:强制使用代理访问资源
  • 注意:出于安全考虑,许多浏览器不支持此状态码

306 Switch Proxy

  • 含义:切换代理
  • 说明:已废弃,不再使用

307 Temporary Redirect

  • 含义:临时重定向
  • 说明:与302类似,但要求客户端保持请求方法不变
  • 使用场景:POST请求的临时重定向
  • 注意:与302的区别是,307不允许将POST请求改为GET请求

308 Permanent Redirect

  • 含义:永久重定向
  • 说明:与301类似,但要求客户端保持请求方法不变
  • 使用场景:POST请求的永久重定向
  • 注意:与301的区别是,308不允许将POST请求改为GET请求

五、4xx 客户端错误(Client Error)

这类状态码表示客户端发送的请求有错误,服务器无法处理。

400 Bad Request

  • 含义:错误请求
  • 说明:服务器无法理解请求的语法
  • 使用场景:请求参数格式错误、请求体格式错误、请求头缺失

401 Unauthorized

  • 含义:未授权
  • 说明:请求需要用户身份验证
  • 使用场景:访问需要登录的资源但未登录
  • 注意:响应头中必须包含WWW-Authenticate字段,指示认证方式

402 Payment Required

  • 含义:需要付款
  • 说明:保留状态码,目前未广泛使用
  • 使用场景:未来可能用于数字支付系统

403 Forbidden

  • 含义:禁止访问
  • 说明:服务器理解请求,但拒绝执行
  • 使用场景:权限不足、IP被封禁、访问被禁止的资源
  • 注意:与401的区别是,403表示身份验证已通过,但没有访问权限

404 Not Found

  • 含义:未找到
  • 说明:服务器找不到请求的资源
  • 使用场景:URL错误、资源已被删除

405 Method Not Allowed

  • 含义:方法不允许
  • 说明:请求的方法不被服务器支持
  • 使用场景:对只读资源使用POST方法
  • 注意:响应头中应包含Allow字段,列出支持的方法

406 Not Acceptable

  • 含义:不可接受
  • 说明:服务器无法生成客户端可接受的响应内容
  • 使用场景:客户端Accept头要求的内容类型服务器无法提供

407 Proxy Authentication Required

  • 含义:需要代理身份验证
  • 说明:客户端必须先通过代理服务器的身份验证
  • 使用场景:访问需要认证的代理服务器
  • 注意:响应头中必须包含Proxy-Authenticate字段

408 Request Timeout

  • 含义:请求超时
  • 说明:服务器等待客户端发送请求的时间过长
  • 使用场景:客户端网络缓慢、请求体过大

409 Conflict

  • 含义:冲突
  • 说明:请求与服务器上的资源状态冲突
  • 使用场景:并发编辑冲突、创建已存在的资源

410 Gone

  • 含义:已永久删除
  • 说明:请求的资源已永久删除,且不会再恢复
  • 使用场景:资源被永久删除
  • 注意:与404的区别是,410明确表示资源已永久删除

411 Length Required

  • 含义:需要内容长度
  • 说明:服务器要求请求包含Content-Length
  • 使用场景:POST请求没有指定Content-Length

412 Precondition Failed

  • 含义:前提条件失败
  • 说明:客户端请求头中的前提条件不满足
  • 使用场景:条件请求(If-MatchIf-Unmodified-Since)失败

413 Payload Too Large

  • 含义:请求体过大
  • 说明:请求体的大小超过了服务器能够处理的限制
  • 使用场景:上传文件过大

414 URI Too Long

  • 含义:URI过长
  • 说明:请求的URI长度超过了服务器能够处理的限制
  • 使用场景:GET请求参数过多导致URL过长

415 Unsupported Media Type

  • 含义:不支持的媒体类型
  • 说明:请求的媒体类型不被服务器支持
  • 使用场景:上传文件的格式不被服务器接受

416 Range Not Satisfiable

  • 含义:范围不满足
  • 说明:客户端请求的字节范围无效
  • 使用场景:断点续传时请求的范围超出了资源的实际大小

417 Expectation Failed

  • 含义:期望失败
  • 说明:服务器无法满足Expect请求头的要求
  • 使用场景:客户端发送Expect: 100-continue,但服务器拒绝继续

418 I’m a teapot

  • 含义:我是一个茶壶
  • 说明:愚人节玩笑状态码,由RFC 2324定义
  • 使用场景:幽默用途,不用于实际生产环境

421 Misdirected Request

  • 含义:错误定向的请求
  • 说明:请求被发送到无法产生响应的服务器
  • 使用场景:HTTP/2连接复用导致的请求错误

422 Unprocessable Entity

  • 含义:无法处理的实体
  • 说明:请求格式正确,但语义错误
  • 使用场景:JSON格式正确,但缺少必要字段或字段值无效
  • 注意:RESTful API中常用此状态码表示参数验证失败

423 Locked (WebDAV)

  • 含义:已锁定
  • 说明:请求的资源被锁定
  • 使用场景:WebDAV资源被其他用户锁定

424 Failed Dependency (WebDAV)

  • 含义:依赖失败
  • 说明:由于前一个请求失败,导致当前请求失败
  • 使用场景:WebDAV的依赖操作

425 Too Early

  • 含义:太早
  • 说明:服务器不愿意处理可能被重放的请求
  • 使用场景:TLS早期数据(Early Data)的安全防护

426 Upgrade Required

  • 含义:需要升级
  • 说明:服务器要求客户端升级到更高版本的协议
  • 使用场景:强制使用HTTPS、强制使用HTTP/2

428 Precondition Required

  • 含义:需要前提条件
  • 说明:服务器要求请求包含条件头
  • 使用场景:防止"丢失更新"问题,要求客户端使用If-MatchIf-Unmodified-Since

429 Too Many Requests

  • 含义:请求过多
  • 说明:客户端在给定时间内发送了过多的请求
  • 使用场景:API限流、防爬虫
  • 注意:响应头中应包含Retry-After字段,指示客户端等待多长时间后重试

431 Request Header Fields Too Large

  • 含义:请求头字段过大
  • 说明:请求头的大小超过了服务器能够处理的限制
  • 使用场景:Cookie过大、自定义请求头过多

451 Unavailable For Legal Reasons

  • 含义:因法律原因不可用
  • 说明:由于法律原因,服务器拒绝提供资源
  • 使用场景:版权问题、政府审查

六、5xx 服务器错误(Server Error)

这类状态码表示服务器在处理请求过程中发生了错误。

500 Internal Server Error

  • 含义:内部服务器错误
  • 说明:服务器遇到了意外情况,无法完成请求
  • 使用场景:服务器代码bug、数据库连接失败、配置错误
  • 注意:这是最常见的服务器错误状态码

501 Not Implemented

  • 含义:未实现
  • 说明:服务器不支持请求的功能
  • 使用场景:服务器不支持请求的HTTP方法

502 Bad Gateway

  • 含义:网关错误
  • 说明:作为网关或代理的服务器,从上游服务器收到了无效的响应
  • 使用场景:反向代理服务器无法连接到后端应用服务器

503 Service Unavailable

  • 含义:服务不可用
  • 说明:服务器暂时无法处理请求
  • 使用场景:服务器维护、服务器过载、流量高峰
  • 注意:响应头中应包含Retry-After字段,指示客户端等待多长时间后重试

504 Gateway Timeout

  • 含义:网关超时
  • 说明:作为网关或代理的服务器,没有及时从上游服务器收到响应
  • 使用场景:后端应用服务器处理时间过长、网络延迟

505 HTTP Version Not Supported

  • 含义:HTTP版本不支持
  • 说明:服务器不支持请求中使用的HTTP版本
  • 使用场景:客户端使用了服务器不支持的HTTP/3版本

506 Variant Also Negotiates

  • 含义:变体也协商
  • 说明:服务器内部配置错误,导致内容协商循环

507 Insufficient Storage (WebDAV)

  • 含义:存储空间不足
  • 说明:服务器无法存储完成请求所需的内容
  • 使用场景:WebDAV服务器磁盘空间不足

508 Loop Detected (WebDAV)

  • 含义:检测到循环
  • 说明:服务器在处理请求时检测到无限循环

510 Not Extended

  • 含义:未扩展
  • 说明:服务器需要进一步扩展才能满足请求

511 Network Authentication Required

  • 含义:需要网络身份验证
  • 说明:客户端需要进行网络身份验证才能访问网络
  • 使用场景:公共Wi-Fi登录页面

七、非标准但广泛使用的状态码

499 Client Closed Request

  • 含义:客户端关闭请求
  • 说明:Nginx扩展状态码,表示客户端在服务器响应之前关闭了连接
  • 使用场景:客户端网络中断、用户主动取消请求

520 Unknown Error

  • 含义:未知错误
  • 说明:Cloudflare扩展状态码,表示上游服务器返回了未知错误

521 Web Server Is Down

  • 含义:Web服务器已关闭
  • 说明:Cloudflare扩展状态码,表示无法连接到上游服务器

522 Connection Timed Out

  • 含义:连接超时
  • 说明:Cloudflare扩展状态码,表示与上游服务器的连接超时

523 Origin Is Unreachable

  • 含义:源站不可达
  • 说明:Cloudflare扩展状态码,表示无法到达上游服务器

524 A Timeout Occurred

  • 含义:发生超时
  • 说明:Cloudflare扩展状态码,表示与上游服务器的连接成功,但响应超时
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐