如何理解 HTTP 状态码?
RFC 规定 HTTP 的状态码为三位数,被分为五类:
1xx
: 表示目前是协议处理的中间状态,还需要后续操作。2xx
: 表示成功状态。3xx
: 重定向状态,资源位置发生变动,需要重新请求。4xx
: 请求报文有误。5xx
: 服务器端发生错误。
接下来就一一分析这里面具体的状态码。
1xx
101 Switching Protocol
(协议切换)状态码表示服务器应客户端 升级协议的请求对协议进行切换。
实现协议切换的原理
1.Connection: Upgrade
该Connection
头被设置为"Upgrade"
以表示的升级要求。Upgrade:protocols
所述Upgrade
标头指定的一个或多个以逗号分隔的协议名称。
2.检查服务器是否支持客户端所需要的协议。
3.服务器可拒绝升级-在这种情况下,它发送回一个普通。或接受升级,在这种情况下,它会发送一个"101 Switching Protocols"
带有升级标头的指定所选协议的标头。
实际案例:
2xx
200 OK
是见得最多的成功状态码。通常在响应体中放有数据。204 No Content
含义与 200 相同,但响应头后没有 body 数据。206 Partial Content
顾名思义,表示部分内容,它的使用场景为HTTP
分块下载和断点续传,当然也会带上相应的响应头字段Content-Range
。
3xx
301 Moved Permanently:
永久重定向- 当你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回
301
,并携带loaction header:新url
,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址。 302 Found:
临时重定向- 资源暂时不可用,浏览器并不会做缓存返回的新url
- 访问某个网站的资源需要权限时,会需要用户去登录,跳转到登录页面之后登录之后,还可以继续访问。
304 Not Modified:
当协商缓存命中时会返回这个状态码。详见浏览器缓存
4xx
-
400 Bad Request
: 开发者经常看到一头雾水,只是笼统地提示了一下错误,并不知道哪里出错了。 -
401 Unauthorized
:代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。这个状态码会与
WWW-Authenticate
首部一起发送,其中包含有如何进行验证的信息。这个状态类似于
403
, 但是在该情况下,依然可以进行身份验证。响应示例
HTTP/1.1 401 Unauthorized Date: Wed, 21 Oct 2015 07:28:00 GMT WWW-Authenticate: Basic realm="Access to staging site"
-
403 Forbidden
: 这实际上并不是请求报文出错,而是服务器禁止访问,原因有很多,比如法律禁止、信息敏感。 -
404 Not Found
: 资源未找到,表示没在服务器上找到相应的资源。 -
405 Method Not Allowed
: 请求方法不被服务器端允许。 -
406 Not Acceptable
: 资源无法满足客户端的条件。 -
408 Request Timeout
: 服务器等待了太长时间
5xx
500 Internal Server Error
: 仅仅告诉你服务器出错了,出了啥错咱也不知道。501 Not Implemented
: 表示客户端请求的功能还不支持。502 Bad Gateway
: 服务器自身是正常的,但访问的时候出错了,啥错误咱也不知道。503 Service Unavailable
: 表示服务器当前很忙,暂时无法响应服务。