HTTP状态码由IETF在RFC 9110中定义、由IANA统一维护注册表。阿里云OpenAPI通常遵循该规范。
阿里云OpenAPI的状态码约定
阿里云OpenAPI通常遵循本文描述的HTTP状态码规范:以2xx表示调用成功,以4xx表示调用方问题(参数不合法、身份认证失败、权限不足、超出配额等),以5xx表示服务端问题。调用出错时,响应体中一般还会给出Code与Message字段提供更细粒度的错误信息,以及用于唯一标识本次调用的RequestId。
状态码的具体语义和触发条件可能因云产品而异。调用OpenAPI时,请以该产品当前的 API 参考文档为准。
状态码的构成与分类
状态码是一个三位整数,用于描述请求的处理结果和响应的语义。有效取值范围是100~599。首位数字定义响应的类别,后两位不承担分类作用。
类别 | 含义 |
1xx(信息性) | 请求已收到,处理继续进行。这是临时响应,一次请求可以先收到零个或多个1xx响应,之后才收到唯一的最终响应。 |
2xx(成功) | 请求已被成功接收、理解并接受。 |
3xx(重定向) | 需要客户端采取进一步操作才能完成请求。 |
4xx(客户端错误) | 请求存在语法问题或无法被满足,问题通常出在调用方。 |
5xx(服务端错误) | 服务端未能完成一个表面上有效的请求,问题出在服务端。 |
状态码明细
下表按类别列出各状态码的标准语义,以及定义该状态码的标准文档。
1xx 信息性响应
1xx响应在首部区结束时即终止,不能携带响应体。由于HTTP/1.0未定义1xx,服务端不得向HTTP/1.0客户端发送1xx响应。
状态码 | 标准名称 | 含义 | 定义来源 |
100 | Continue | 继续。请求的起始部分已被接收且尚未被拒绝,服务端愿意接收请求体。客户端应继续发送请求体,并丢弃该临时响应。 | RFC 9110 |
101 | Switching Protocols | 切换协议。服务端同意客户端通过Upgrade首部提出的协议切换请求,并在响应中用Upgrade首部指明切换后生效的协议。 | RFC 9110 |
102 | Processing | 处理中。WebDAV扩展定义,现已废弃,不建议在新设计中使用。 | RFC 2518 |
103 | Early Hints | 早期提示。在最终响应之前先返回部分首部(通常是Link),供客户端提前预加载资源。 | RFC 8297 |
2xx 成功
状态码 | 标准名称 | 含义 | 定义来源 |
200 | OK | 成功。请求已成功处理,响应体的内容取决于请求方法:GET返回目标资源的表示,POST返回操作状态或结果,PUT和DELETE返回操作状态,OPTIONS返回目标资源的通信选项。 | RFC 9110 |
201 | Created | 已创建。请求已完成,并创建了一个或多个新资源。主资源由响应的Location首部标识;未返回Location时,即为请求的目标URI。 | RFC 9110 |
202 | Accepted | 已接受。请求已被接受处理,但处理尚未完成,最终也可能不被执行。HTTP没有为异步操作补发状态码的机制,因此响应体通常会指向一个可查询进度的状态资源。 | RFC 9110 |
203 | Non-Authoritative Information | 非权威信息。请求成功,但响应体已被中间的转换代理修改,与源服务器的200响应内容不同。 | RFC 9110 |
204 | No Content | 无内容。请求已成功处理,且没有额外内容需要在响应体中返回。元数据仍可通过响应首部传递。 | RFC 9110 |
205 | Reset Content | 重置内容。请求已成功处理,客户端应重置引发该请求的文档视图,例如清空表单。 | RFC 9110 |
206 | Partial Content | 部分内容。服务端成功响应了带Range首部的范围请求,仅返回目标资源的一个或多个片段。常用于断点续传和大文件分片下载。 | RFC 9110 |
207 | Multi-Status | 多状态。WebDAV扩展定义,响应体中携带多个子操作各自的状态。 | RFC 4918 |
208 | Already Reported | 已报告。WebDAV绑定扩展定义,用于避免在同一响应中重复枚举同一资源。 | RFC 5842 |
226 | IM Used | 已应用差量编码。服务端已对目标资源应用一个或多个差量编码操作,返回的是差量结果而非完整资源。 | RFC 3229 |
3xx 重定向
301、302、307、308都表示资源位于另一个URI,区别在于是否永久以及是否允许改变请求方法。历史原因导致客户端在处理301和302时可能把POST改写成GET;如果不希望发生这种改写,应改用308和307。
状态码 | 标准名称 | 含义 | 定义来源 |
300 | Multiple Choices | 多种选择。目标资源有多个可选表示,需要由客户端或用户从中选择一个。 | RFC 9110 |
301 | Moved Permanently | 永久移动。目标资源已分配新的永久URI,后续引用都应改用新URI。服务端应在Location首部给出新URI。 | RFC 9110 |
302 | Found | 已找到。目标资源临时位于另一个URI。由于重定向可能随时变化,客户端后续请求仍应使用原URI。 | RFC 9110 |
303 | See Other | 参见其他。服务端把客户端引导至另一个资源以间接回应本次请求。客户端应对Location指向的URI发起GET或HEAD请求,并把结果作为本次请求的答案。新URI与原目标URI不等价。 | RFC 9110 |
304 | Not Modified | 未修改。条件GET或HEAD请求的前置条件求值为假,说明客户端已持有有效的资源表示,服务端无需重复传输,客户端可直接使用本地缓存。该响应不能携带响应体。 | RFC 9110 |
305 | Use Proxy | 使用代理。已废弃,不得在新实现中使用。 | RFC 9110 |
306 | (Unused) | 未使用。曾在早期版本中定义,现已不再使用,该码保留占位。 | RFC 9110 |
307 | Temporary Redirect | 临时重定向。目标资源临时位于另一个URI,且客户端在自动重定向时不得改变请求方法。 | RFC 9110 |
308 | Permanent Redirect | 永久重定向。语义与301相同,但要求客户端在自动重定向时保持原请求方法。该状态码定义于2014年,比同类状态码晚,部分老旧实现可能无法识别。 | RFC 9110 |
4xx 客户端错误
除响应HEAD请求外,服务端应在响应体中说明错误情况以及该错误是临时的还是永久的。这类状态码适用于任何请求方法。
状态码 | 标准名称 | 含义 | 定义来源 |
400 | Bad Request | 请求有误。服务端认为请求存在客户端错误而无法处理,例如请求语法错误、报文分帧无效或请求路由具有欺骗性。 | RFC 9110 |
401 | Unauthorized | 未认证。请求缺少目标资源所需的有效身份凭据。服务端必须返回WWW-Authenticate首部,说明可用的认证方式。如果请求已带凭据,则表示这些凭据被拒绝。 | RFC 9110 |
402 | Payment Required | 需要付费。标准保留状态码,语义留待未来定义。 | RFC 9110 |
403 | Forbidden | 禁止访问。服务端理解该请求但拒绝执行。如果请求已提供凭据,说明服务端认为这些凭据的权限不足,客户端不应换用同一凭据自动重试。 | RFC 9110 |
404 | Not Found | 未找到。源服务器未找到目标资源的当前表示,或不愿透露该资源是否存在。 | RFC 9110 |
405 | Method Not Allowed | 方法不允许。目标资源不支持本次请求使用的方法。服务端必须返回Allow首部,列出该资源支持的方法。 | RFC 9110 |
406 | Not Acceptable | 无可接受表示。目标资源没有符合请求中内容协商首部要求的表示形式。 | RFC 9110 |
407 | Proxy Authentication Required | 需要代理认证。语义与401类似,但要求客户端向代理而非源服务器提供凭据。 | RFC 9110 |
408 | Request Timeout | 请求超时。服务端在其愿意等待的时间内未收到完整请求。 | RFC 9110 |
409 | Conflict | 状态冲突。请求与目标资源的当前状态冲突,无法完成。 | RFC 9110 |
410 | Gone | 已删除。目标资源在源服务器上不再可用,且这一状态可能是永久的。 | RFC 9110 |
411 | Length Required | 需要内容长度。服务端要求请求携带Content-Length首部。 | RFC 9110 |
412 | Precondition Failed | 前置条件失败。请求首部中的一个或多个前置条件在服务端求值为假。 | RFC 9110 |
413 | Content Too Large | 请求体过大。请求体的大小超出服务端愿意或能够处理的上限。 | RFC 9110 |
414 | URI Too Long | URI过长。请求目标的URI长度超出服务端愿意解析的上限。 | RFC 9110 |
415 | Unsupported Media Type | 媒体类型不支持。目标资源不支持请求体所使用的内容格式。 | RFC 9110 |
416 | Range Not Satisfiable | 范围无法满足。Range首部指定的范围与目标资源的当前范围不匹配,或范围集合本身无效。 | RFC 9110 |
417 | Expectation Failed | 期望失败。Expect首部中的期望无法被服务端满足。 | RFC 9110 |
418 | (Unused) | 未使用。该码曾被一份非正式的协议草案占用,现保留占位,不得赋予新语义。 | RFC 9110 |
421 | Misdirected Request | 请求投递错误。请求被发往一台无法对该URI的权威做出响应的服务器。 | RFC 9110 |
422 | Unprocessable Content | 内容无法处理。请求体的媒体类型和语法都可被理解,但其中的语义指令无法被处理。 | RFC 9110 |
423 | Locked | 资源已锁定。WebDAV扩展定义,目标资源处于锁定状态。 | RFC 4918 |
424 | Failed Dependency | 依赖操作失败。WebDAV扩展定义,本次操作所依赖的另一个操作未能成功。 | RFC 4918 |
425 | Too Early | 过早。服务端不愿处理在TLS早期数据中重放的请求,客户端应在握手完成后重试。 | RFC 8470 |
426 | Upgrade Required | 需要升级协议。服务端拒绝用当前协议处理该请求,但在客户端升级协议后可能同意。响应必须包含Upgrade首部。 | RFC 9110 |
428 | Precondition Required | 要求前置条件。服务端要求请求必须带前置条件,以避免并发更新相互覆盖。 | RFC 6585 |
429 | Too Many Requests | 请求过多。客户端在给定时间内发送的请求数超过限制。响应中可能带Retry-After首部,指示建议的重试等待时间。 | RFC 6585 |
431 | Request Header Fields Too Large | 请求首部过大。单个首部字段或首部整体的大小超出服务端处理上限。 | RFC 6585 |
451 | Unavailable For Legal Reasons | 因法律原因不可用。服务端因收到法律要求而拒绝提供目标资源。 | RFC 7725 |
5xx 服务端错误
状态码 | 标准名称 | 含义 | 定义来源 |
500 | Internal Server Error | 服务端内部错误。服务端遇到意外情况,导致无法完成请求。 | RFC 9110 |
501 | Not Implemented | 未实现。服务端不支持完成该请求所需的功能,通常表示无法识别请求方法。 | RFC 9110 |
502 | Bad Gateway | 网关错误。作为网关或代理的服务端从上游收到了无效响应。 | RFC 9110 |
503 | Service Unavailable | 服务不可用。服务端因临时过载或计划内维护,当前无法处理请求。这是一种临时状态,响应中可能带Retry-After首部。 | RFC 9110 |
504 | Gateway Timeout | 网关超时。作为网关或代理的服务端未能在预期时间内从上游获得响应。 | RFC 9110 |
505 | HTTP Version Not Supported | HTTP版本不支持。服务端不支持或拒绝支持请求所用的HTTP主版本。 | RFC 9110 |
506 | Variant Also Negotiates | 协商配置错误。透明内容协商扩展定义,服务端存在内部配置错误。 | RFC 2295 |
507 | Insufficient Storage | 存储空间不足。WebDAV扩展定义,服务端无法为完成请求分配足够的存储空间。 | RFC 4918 |
508 | Loop Detected | 检测到循环。WebDAV绑定扩展定义,服务端在处理请求时检测到无限循环。 | RFC 5842 |
510 | Not Extended | 未扩展。原始定义已作废,该码在注册表中保留但语义不再适用。 | RFC 2774 |
511 | Network Authentication Required | 需要网络认证。客户端需要先通过网络接入认证(例如公共Wi-Fi的门户页)才能访问网络。 | RFC 6585 |