- 状态码告知从服务器端返回的请求结果
- 2XX 成功
- 3XX 重定向
- 4XX 客户端错误
- 400 Bad Request
- 401 Unauthorized
- 402 Payment Required
- 403 Forbidden
- 404 Not Found
- 405 Method Not Allowed
- 406 Not Acceptable
- 407 Proxy Authentication Required
- 408 Request Time-out
- 409 Conflic
- 410 Gone
- 411 Length Required
- 412 Precondition Failed
- 413 Request Entity Too Large
- 414 Request-URI Too Large
- 415 Unsupported Media Type
- 416 Requested range not satisfiable
- 417 Expectation Failed
- 5XX 服务器错误
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。
状态码告知从服务器端返回的请求结果
状态码的指责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以直到服务器端是正常处理来请求,还是出现来错误。
2XX 成功
200 OK
200 状态码表示从客户端发来的请求在服务器端被正常处理了。例如,使用 GET 方法时,对应请求资源的实体会作为响应返回;而使用 HEAD 方法时,对应请求资源的实体主体不随报文首部作为响应返回。
201 Created
202 Accepted
203 Non-Authoritative Information
203 表示已成功发送请求,但返回的 meta 信息不在原始的服务器,而是一个副本
204 No Content
204 状态码代表服务器接收的请求已成功处理,但在返回的响应结果中不含实体的主体部分;也不允许返回任何实体的主体。例如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。
205 Reset Content
205 表示服务器端已成功处理请求,客户端需要重置文档视图。
206 Partial Content
206 状态码表示客户端进行了范围请求,而服务器端成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。一般多用于下载业务,文件下载时每次返回部分资源,直到下载完成。
3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。一般用在网站调整(如改变目录结构)、网页移动到新网址、网页扩展名改变(如应用需要把 .php 改成 .html)等情况下;也多用于某些注册了多个域名的网站,通过重定向让访问这些域名的用户自动跳转到主站点。
300 Multiple Choices
300 表示请求的资源存储多个位置,服务器端返回一个资源特征与地址的列表给客户端做出选择后再次发送请求。
301 Moved Permanently
301 永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。简单说,301 状态码提升客户端需要更新书签。例如下方给出的请求 URI,当指定资源路径的最后缺少斜杠 /
,就会产生 301 状态码。
http://example.com/sample
302 Found
302 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户本次能使用新的 URI 访问。302 状态码和 301 状态码相似,但 302 状态码代表资源不是被永久移动,只是临时(本次)性质的。如短网址业务场景,将长网站按照算法规则转换为短网址,用户访问短网址时响应 302 重定向到对应的长网址。
303 See Other
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
304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发送请求未满足条件的情况下,直接返回 304 Not Modified(服务器端资源未改变,可直接使用客户端未国旗的缓存)。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。304 是缓存服务器向资源服务器请求资源是,资源服务器端响应报文中带有一个 Last Modified 字段,缓存服务器记录下这个时间字段,当用户下次向缓存服务器发出请求时,缓存服务器为了确保当前资源文件是最新的,先向资源服务器做一次 GET 请求,请求头部带上 If-Modified-Since,该字段结果即上一次 Last Modifie 字段值,如果资源没有更新,则资源服务器响应 304 Not Modified。
305 Use Proxy
306 Unused
307 Temporary Redirect
307 临时重定向。该状态码与 302 状态码有着相同的含义,但307 会遵照浏览器标准,不会将 POST 改成 GET,但是对于处理响应时的行为,每种浏览器有可能出现不同的情况。
4XX 客户端错误
400 Bad Request
400 表示请求报文中存在语法错误,正确修过请求的内容后再发送请求。
401 Unauthorized
401 表示发送的请求未通过 HTTP 认证(Basic 认证、DIGEST 认证)。
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
405 表示请求客户端请求中的方法被禁止,即服务器端禁止客户端使用当前方法请求该资源。
406 Not Acceptable
407 Proxy Authentication Required
407 表示客户端需有使用含代理的身份认证,与 401 类似,但客户端需要使用代理进行授权。
408 Request Time-out
408 表示服务器端等待客户端发送的请求时间超长导致请求超时。
409 Conflic
410 Gone
410 表示客户端请求的资源已经不存在。410 与 404 的区别是,如果资源以前有但现在被永久删除了。
411 Length Required
411 表示服务器端无法处理请求头信息不包含 Content-Length 字段的客户端请求。
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Large
415 Unsupported Media Type
416 Requested range not satisfiable
417 Expectation Failed
5XX 服务器错误
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
502 表示作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
503 Service Unavailable
503 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
504 Gateway Timeout
504 表示充当网关或者代理的服务器,未及时从远端服务器获取请求。
505 HTTP Version not supported
505 表示服务器端不支持请求的 HTTP 协议的版本,无法完成请求。
状态码和状况可能会不一致。有时返回的状态码响应是错误的,状态码不能和状况强关联。通常情况下,接口请求都会响应 200 状态码,但会在实体主体中包含 IsSuccess 是否执行成功或 IsError 是否执行失败等标示字段。响应是否正确需要结合业务场景具体分析。