Http状态码
http状态码有5种,分别是
- (1**)消息,服务器收到请求,需要执行请求者继续执行操作
- (2**)成功,操作被成功接收并处理
- (3**)重定向,需要进一步操作以完成请求
- (4**)客户端错误,请求包含语法错误或无法完成请求
- (5**)服务器错误,服务器在处理请求过程中发生了错误
下面详细介绍一下这5中状态码出现的场景
1** 继续请求
1开头的状态码常见于socket中
101 Switching Protocols
点击 百度 之后,打开控制台,找到Network(网络)
中的ws
面板可以看到当前的请求状态代码就是101 Switching Protocols

2** 请求成功
200 OK, 这种请求状态码比较常见,不再做详细介绍
不同请求方式对于请求成功的意义如下:
GET: 已经取得资源,并将资源添加到响应的消息体中。
HEAD: 响应的消息体为头部信息。
POST: 响应的消息体中包含此次请求的结果。
TRACE: 响应的消息体中包含服务器接收到的请求信息。
PUT 和 DELETE 的请求成功通常并不是响应200 OK的状态码而是 204 No Content 表示无内容(或者 201 Created表示一个资源首次被创建成功)。
202 Accepted,
响应状态码 202 Accepted 表示服务器端已经收到请求消息,但是尚未进行处理。但是对于请求的处理确实无保证的,即稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。这个状态码被设计用来将请求交由另外一个进程或者服务器来进行处理,或者是对请求进行批处理的情形。
举个栗子(来自 链接):
一个接口为 /api/v1/month_report, 功能是返回某个月的报表数据,处理耗时一般30~60秒,可以这样设计
- client 发送
POST /api/v1/month_report
参数为{'month':'2019-02'}
, 服务端接受参数并且返回状态码 202,body为{'taskid': 'cxxxx0001'}
, 服务端下发一个任务到MQ或者其他异步处理的方式,同时记录task cxxxx0001
的状态为running
- 10秒之后 client 发送
GET /api/v1/month_report/cxxxx0001
获取任务结果,此时服务端可能有几种情况- 任务成功,返回 200 , 内容为 {“status”: “done”, “details”: {….}}
- 任务还在执行中,返回 202, 内容为 {“status”: “running”}
- 任务失败,返回 200(或者404), 内容为 {“status”: “failure”}
- 如果client获取到是202状态,再过20s重试一次,比如说2分钟之后仍然没有成功,可以继续轮训,或者根据需要定义timeout, client方认为调用失败
3** 转发/重定向
301 Moved Permanently
HTTP 301 永久重定向 说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。
302 Found // 临时移动,客户端继续使用原有的URL
HTTP 302 Found 重定向状态码表明请求的资源被暂时的移动到了由Location 头部指定的 URL 上。浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新
304 Not Modified
HTTP 304 未改变说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GET 或HEAD 或在请求中附带了头部信息: If-None-Match 或If-Modified-Since。
307 Temporary Redirect
HTTP 307 Temporary Redirect,临时重定向响应状态码,表示请求的资源暂时地被移动到了响应的 Location 首部所指向的 URL 上。
308 Permanent Redirect
在 HTTP 协议中, 308 Permanent Redirect(永久重定向)是表示重定向的响应状态码,说明请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。浏览器会进行重定向,同时搜索引擎也会更新其链接(用 SEO 的行话来说,意思是“链接汁”(link juice)被传递到了新的 URL)。
4** 客户端错误
400 Bad Request //参数错误
HTTP 400 Bad Request 响应状态码表示由于语法无效,服务器无法理解该请求。 客户端不应该在未经修改的情况下重复此请求。
401 Unauthorized
状态码 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
这个状态类似于 403, 但是在该情况下,依然可以进行身份验证。
403 Forbidden
状态码 403 Forbidden 代表客户端错误,指的是服务器端有能力处理该请求,但是拒绝授权访问。
这个状态类似于 401,但进入该状态后不能再继续进行验证。该访问是长期禁止的,并且与应用逻辑密切相关(例如不正确的密码)。
404 Not Found //资源不存在
状态码 404 Not Found 代表客户端错误,指的是服务器端无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。
404 状态码并不能说明请求的资源是临时还是永久丢失。如果服务器知道该资源是永久丢失,那么应该返回 410 (Gone) 而不是 404 。
405 Method Not Allowed //请求方式不支持
状态码 405 Method Not Allowed 表明服务器禁止了使用当前 HTTP 方法的请求。
414 URI Too Long
响应码 414 URI Too Long 表示客户端所请求的 URI 超过了服务器允许的范围。
以下是造成这种罕见情况的几种可能原因:
当客户端误将 POST 请求当作 GET 请求时,会带有一个较长的查询字符串(query);
当客户端堕入重定向循环黑洞时,例如,指向自身后缀的重定向URI前缀(a redirected URI prefix that points to a suffix of itself);
当客户端对服务器进行攻击,试图寻找潜在的漏洞时。
5** 服务器错误
500 Internal Server Error //服务器错误
在 HTTP 协议中,500 Internal Server Error 是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。
这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。
502 Bad Gateway
502 Bad Gateway 是一种HTTP协议的服务器端错误状态代码,它表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。
503 Service Unavailable
503 Service Unavailable 是一种HTTP协议的服务器端错误状态代码,它表示服务器尚未处于可以接受请求的状态。
通常造成这种情况的原因是由于服务器停机维护或者已超载。注意在发送该响应的时候,应该同时发送一个对用户友好的页面来解释问题发生的原因。该种响应应该用于临时状况下,与之同时,在可行的情况下,应该在 Retry-After 首部字段中包含服务恢复的预期时间。
缓存相关的首部在与该响应一同发送时应该小心使用,因为 503 状态码通常应用于临时状况下,而此类响应一般不应该进行缓存。
504 Gateway Timeout
504 Gateway Timeout 是一种HTTP协议的服务器端错误状态代码,表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应。
505 HTTP Version Not Supported
505 HTTP Version Not Supported 是一种HTTP协议的服务器端错误状态代码,表示服务器不支持请求所使用的 HTTP 版本。