网络-http状态码

155 阅读3分钟

如何理解 HTTP 状态码?

RFC 规定 HTTP 的状态码为三位数,被分为五类:

  • 1xx: 表示目前是协议处理的中间状态,还需要后续操作。
  • 2xx: 表示成功状态。
  • 3xx: 重定向状态,资源位置发生变动,需要重新请求。
  • 4xx: 请求报文有误。
  • 5xx: 服务器端发生错误。

接下来就一一分析这里面具体的状态码。

1xx

image.png

  • 101 Switching Protocol(协议切换)状态码表示服务器客户端 升级协议的请求对协议进行切换。

实现协议切换的原理

1.Connection: UpgradeConnection头被设置为"Upgrade"以表示的升级要求。Upgrade:protocols所述Upgrade标头指定的一个或多个以逗号分隔的协议名称。

2.检查服务器是否支持客户端所需要的协议。

3.服务器可拒绝升级-在这种情况下,它发送回一个普通。或接受升级,在这种情况下,它会发送一个"101 Switching Protocols"带有升级标头的指定所选协议的标头。

实际案例: image.png

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: 表示服务器当前很忙,暂时无法响应服务。