HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。

状态码告知从服务器端返回的请求结果

状态码的指责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以直到服务器端是正常处理来请求,还是出现来错误。
image.png

2XX 成功

2XX 的响应结果表明请求被正常处理

200 OK

image.png
200 状态码表示从客户端发来的请求在服务器端被正常处理了。例如,使用 GET 方法时,对应请求资源的实体会作为响应返回;而使用 HEAD 方法时,对应请求资源的实体主体不随报文首部作为响应返回。

201 Created

201 表示已成功请发送求,并且已创建了新的资源。

202 Accepted

202 表示服务器端已接收到请求,但未处理完成。

203 Non-Authoritative Information

203 表示已成功发送请求,但返回的 meta 信息不在原始的服务器,而是一个副本

204 No Content

image.png
204 状态码代表服务器接收的请求已成功处理,但在返回的响应结果中不含实体的主体部分;也不允许返回任何实体的主体。例如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。

205 Reset Content

205 表示服务器端已成功处理请求,客户端需要重置文档视图。

206 Partial Content

image.png
206 状态码表示客户端进行了范围请求,而服务器端成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。一般多用于下载业务,文件下载时每次返回部分资源,直到下载完成。

3XX 重定向

3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。一般用在网站调整(如改变目录结构)、网页移动到新网址、网页扩展名改变(如应用需要把 .php 改成 .html)等情况下;也多用于某些注册了多个域名的网站,通过重定向让访问这些域名的用户自动跳转到主站点。

300 Multiple Choices

300 表示请求的资源存储多个位置,服务器端返回一个资源特征与地址的列表给客户端做出选择后再次发送请求。

301 Moved Permanently

image.png
301 永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。简单说,301 状态码提升客户端需要更新书签。例如下方给出的请求 URI,当指定资源路径的最后缺少斜杠 /,就会产生 301 状态码。

  1. http://example.com/sample

302 Found

image.png
302 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户本次能使用新的 URI 访问。302 状态码和 301 状态码相似,但 302 状态码代表资源不是被永久移动,只是临时(本次)性质的。如短网址业务场景,将长网站按照算法规则转换为短网址,用户访问短网址时响应 302 重定向到对应的长网址。

303 See Other

image.png
303 状态码表示由于请求对于的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。

1、当 301 、302 、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。 2、301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使用是大家都会这么做。

Q:浏览器为什么要把 POST 方法改成 GET 方法?
A:如果浏览器发送的最后一个请求是 POST ,此时用户点击刷新按钮,浏览器会弹出确认对话框询问客户是否要重新提交表单,造成用户体验很差。为了提高用户体验,浏览器会先返回 302/303 重定向。让用户重定向回到这个地址,并且由于浏览器会自动把 POST 改成 GET,所以这是相当于以 GET 的方法又访问了一遍这个地址,最后一个请求变成了 GET,用户点击刷新按钮时不会弹出确认对话框,用户体验非常流畅。这种技巧称为 POST 重定向/GET 模式。

304 Not Modified

image.png
304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发送请求未满足条件的情况下,直接返回 304 Not Modified(服务器端资源未改变,可直接使用客户端未国旗的缓存)。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。304 是缓存服务器向资源服务器请求资源是,资源服务器端响应报文中带有一个 Last Modified 字段,缓存服务器记录下这个时间字段,当用户下次向缓存服务器发出请求时,缓存服务器为了确保当前资源文件是最新的,先向资源服务器做一次 GET 请求,请求头部带上 If-Modified-Since,该字段结果即上一次 Last Modifie 字段值,如果资源没有更新,则资源服务器响应 304 Not Modified。

305 Use Proxy

305 表示请求服务器端的资源必须通过代理才可访问。

306 Unused

306 状态码已废弃

307 Temporary Redirect

307 临时重定向。该状态码与 302 状态码有着相同的含义,但307 会遵照浏览器标准,不会将 POST 改成 GET,但是对于处理响应时的行为,每种浏览器有可能出现不同的情况。

4XX 客户端错误

4XX 的响应结果表明客户端是发送错误的原因所在。

400 Bad Request

image.png
400 表示请求报文中存在语法错误,正确修过请求的内容后再发送请求。

401 Unauthorized

image.png
401 表示发送的请求未通过 HTTP 认证(Basic 认证、DIGEST 认证)。

402 Payment Required

402 状态码是预留状态码。

403 Forbidden

image.png
403 表示对请求资源的访问被服务器端拒绝,即无权访问。

404 Not Found

image.png
404 表示服务器上无法找到请求的资源。

405 Method Not Allowed

405 表示请求客户端请求中的方法被禁止,即服务器端禁止客户端使用当前方法请求该资源。

406 Not Acceptable

406 表示服务器端无法根据客户端请求的内容特性完成请求。

407 Proxy Authentication Required

407 表示客户端需有使用含代理的身份认证,与 401 类似,但客户端需要使用代理进行授权。

408 Request Time-out

408 表示服务器端等待客户端发送的请求时间超长导致请求超时。

409 Conflic

409 表示服务器端处理请求时发生了冲突。

410 Gone

410 表示客户端请求的资源已经不存在。410 与 404 的区别是,如果资源以前有但现在被永久删除了。

411 Length Required

411 表示服务器端无法处理请求头信息不包含 Content-Length 字段的客户端请求。

412 Precondition Failed

412 表示客户端请求新的先决条件错误。

413 Request Entity Too Large

413 表示客户端请求实体过大,服务器端无法处理。

414 Request-URI Too Large

414 表示客户端请求的 URI 过长,服务器端无法处理。

415 Unsupported Media Type

415 表示服务器端无法处理请求附带的媒体格式。

416 Requested range not satisfiable

416 表示客户端的请求范围无效

417 Expectation Failed

417 表示服务器端无法满足 Except 的请求头信息

5XX 服务器错误

5XX 的响应结果表明服务器本身发生错误。

500 Internal Server Error

image.png
500 表示服务器在执行请求时发生了错误。

501 Not Implemented

501 表示服务器端不支持此请求。

502 Bad Gateway

502 表示作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。

503 Service Unavailable

image.png
503 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

504 Gateway Timeout

504 表示充当网关或者代理的服务器,未及时从远端服务器获取请求。

505 HTTP Version not supported

505 表示服务器端不支持请求的 HTTP 协议的版本,无法完成请求。

状态码和状况可能会不一致。有时返回的状态码响应是错误的,状态码不能和状况强关联。通常情况下,接口请求都会响应 200 状态码,但会在实体主体中包含 IsSuccess 是否执行成功或 IsError 是否执行失败等标示字段。响应是否正确需要结合业务场景具体分析。