每个HTTP响应都有一个状态代码,它以明确的数字表示请求的处理情况。
HTTP状态码是HTTP响应中的第一行,它是由服务器发送给客户端的。
如果你想知道服务器为什么要发送一个特定的状态代码,看看它意味着什么,或者如果你正在建立服务器,你正在浏览完美的状态代码返回,这个列表将是有用的。
状态代码通过3位数的数字,加上一个简短的描述来表达。
数字的第一个数字标识了响应组。
有5个组。
1xx: 信息性响应 - 表示收到了请求并理解了该请求2xx:成功响应--表明客户要求的行动被接收、理解和接受3xx:重定向 - 表示客户端必须采取额外的行动来完成请求4xx: 客户端错误 - 表示有一个错误,似乎是由客户端造成的5xx服务器错误--表示服务器上发生了一个错误
在文章的其余部分,我列出了所有有用的状态代码。
(我删除了一些特定技术的代码,比如WebDAV,以及很少使用的代码)
信息性回应
| 状态代码 | 说明 |
|---|---|
| 100 继续 | 服务器已经收到了请求头,客户端应该继续发送请求正文(如果是需要发送正文的请求;例如,POST请求)。在一个请求因为不合适的头信息而被拒绝后,再向服务器发送一个大的请求正文,是低效的。为了让服务器检查请求的头信息,客户端必须在其初始请求中发送Expect: 100-continue作为头信息,并在发送正文之前收到100 Continue状态代码的响应。如果客户端收到一个错误代码,如403(禁止)或405(方法不允许),那么它不应该发送请求的正文。响应417 Expectation Failed表明应该在没有Expect头的情况下重复请求,因为它表明服务器不支持期望(例如HTTP/1.0服务器就属于这种情况)。 |
| 101 切换协议 | 客户端要求服务器切换协议,服务器也同意这样做。见RFC 7231#6.2.2 |
成功响应
| 状态代码 | 描述 |
|---|---|
| 200 OK | 这是对成功的HTTP请求的标准响应。 |
| 201 创建 | 通常是对一个POST请求的响应。请求已经完成,一个新的资源已经被创建。 |
| 202 已接受 | 该请求已被接受进行处理。没有说实际的处理,以及处理的结果,这可能发生在一个单独的服务器上,或分批进行。 |
| 203 非权威性信息 | 原先的服务器返回了200,而客户端和服务器之间的转换代理改变了有效载荷 |
| 204 没有内容 | 服务器成功处理了该请求,但没有返回任何内容。 |
| 205 重置内容 | 服务器成功处理了该请求,但没有返回任何内容。类似于204响应,但服务器要求客户端重置文档视图(例如用于清除表单)。 |
| 206 部分内容 | 为了响应来自客户端的Range 请求,服务器会发送一个部分内容的响应。见RFC 7233#4.1 |
重定向
| 状态代码 | 描述 |
|---|---|
| 301 已永久移动 | 这个请求和所有未来的请求都应该被导向给定的URI。只在GET/HEAD请求中使用,其他所有的方法308 Permanent Redirect 。 |
| 302 找到 | 该资源被暂时转移到由Location 头指定的URL。只适用于GET/HEAD请求,其他所有方法均适用于307 Temporary Redirect 。 |
| 303 查看其他 | 在POST或PUT请求后,指向Location 头中的确认信息,可使用新的GET请求访问。 |
| 304 未修改 | 当客户端使用请求头If-Modified-Since 或If-None-Match ,这个响应状态代码表示资源没有被修改。 |
| 307 临时重定向 | 与302 请求类似,只是不允许改变HTTP方法。 |
| 308 永久重定向 | 类似于301 请求,只是不允许改变HTTP方法。 |
客户端错误
| 状态代码 | 描述 |
|---|---|
| 400 错误请求 | 由于在客户端产生的请求错误,服务器无法处理该请求。错误可能包括畸形的请求,尺寸太大无法处理,或其他。 |
| 401 未授权 | 当需要认证而客户端没有授权时发送。 |
| 403 禁止 | 由于各种原因,该资源不可用。如果原因是认证,最好使用401 Unauthorized 状态代码。 |
| 404 未找到 | 无法找到请求的资源。 |
| 405 不允许使用的方法 | 该资源通过该HTTP方法不可用,但可能通过其他方法可用。 |
| 406 不接受 | 客户端传递了一个Accept 标头,其值与服务器不兼容。 |
| 407 需要代理认证 | 在客户端和服务器之间有一个需要认证的代理。 |
| 408 请求超时 | 服务器在等待该请求时超时。 |
| 409 冲突 | 表示请求无法被处理,因为资源的当前状态有冲突,例如多个同时更新的编辑冲突。 |
| 410 消失 | 该资源不再可用,也不会再次可用。比404更强大,例如搜索引擎将其解释为从他们的索引中删除该资源的指示。 |
| 411 长度要求 | 客户端需要在请求中添加一个Content-Length头,而且是必需的。 |
| 412 前提条件失败 | 如果客户端发送了一个If-Unmodified-Since 或If-None-Match 请求头,而服务器不能满足该条件,则返回。 |
| 413 有效载荷过大 | 该请求大于服务器愿意或能够处理的范围。 |
| 414 URI太长 | 提供的URI太长,服务器无法处理。 |
| 415 不支持的媒体类型 | 请求实体有一个服务器或资源不支持的媒体类型。 |
| 416 Range Not Satisfiable | 客户端使用Range 标头要求获得文件的一部分,但服务器无法提供该部分。 |
| 417 期望失败 | 服务器不能满足Expect 请求头的要求。 |
| 421 误导的请求 | 该请求被指向一个不能产生响应的服务器(例如,由于连接重用)。 |
| 426 需要升级 | 客户端应切换到不同的协议,如TLS/1.0,在Upgrade 头域中指定。 |
| 428 需要的前提条件 | 服务器要求该请求包含一个If-Match 头。 |
| 429 太多的请求 | 用户在一定时间内发送了太多的请求。用于速率限制。 |
| 431 请求头字段过大 | 由于一个或多个标头,或整个标头集过大,请求不能被满足。 |
| 451 因法律原因不可用 | 由于法律原因,该资源不可用 |
服务器错误
| 状态代码 | 描述 |
|---|---|
| 500内部服务器错误 | 一个通用的服务器错误信息,当遇到一个意外的情况,并且没有更具体的信息是合适的时候给出。 |
| 501 未执行 | 服务器不承认该请求方法,或者它没有能力完成该请求。 |
| 502 坏网关 | 服务器作为一个网关或代理,从上游服务器收到一个无效的响应。 |
| 503 服务不可用 | 该服务器目前暂时不可用(因为它过载或因维护而停机)。 |
| 504 网关超时 | 该服务器作为一个网关或代理,没有及时收到上游服务器的响应。 |
| 505 HTTP版本不支持 | 该服务器不支持请求中指定的HTTP协议版本。 |