导言
上篇我们说的是HTTP的请求方法,主要介绍的是HTTP/1.1版本的8种基本请求方法。客户端发送请求之后,服务器会做出对应的响应,是请求成功了,还是失败了,如果是失败了,是什么原因导致的呢?这篇我们要说的响应状态码,就包含有成功或某种情况下的失败对应数字码。
还记得我们在说起始行的时候,状态行中就包含有三个关键信息:协议版本、状态码和原因解释。其中状态码和原因就是我们今天要说的。
响应状态码
RFC文档标准中规定状态码是三位数,但也并非简单的从000~999,这样状态码足足有1000个,太多了,不利于应用。其实标准中仅定义了41个状态码,但状态码的定义是开放的,可以自行有效扩展。
这么多状态码大体分为五类,分别是以1到5开头,下面我们来说下这五类的大体含义:
1xx
1xx类是提示信息,表示的是协议处理的中间状态,还有后续操作,这个在实际开发中可能比较少见。
2xx
2xx这个是最常见的之一,表示服务端成功响应了客户端的请求,这也是客户端最希望看到的结果。
200 OK
:表示请求一切正常,有正常的返回数据。
204 Not Content
:也是一种正常状态,和200 OK
类似,只是响应头中没有body数据。
‘206 Partial Content’:是HTTP分块下载和断点续传的基础。它其实也表示请求的正常状态,只是响应的body数据是整块数据的片段。它一般有伴随着头字段Content-Range
返回,如:
Content-Range: bytes 0-99/2000
含义是本次请求共返回了2000个字节中的前100个。
3xx
3xx表示的是客户端的请求资源发生了变动,需要通过重定向来找到最新的资源。比较常见的状态码是301和302,它们虽然都是重定向,但也有区别:
301 Moved Permanently
:表示的是永久重定向,资源已经不存在了,以后都需要获取新的资源。
302 Found
:临时性的,可能原资源服务器暂时需要维护。
4xx
4xx表示的是客户端发送的请求报文有错误,服务端无法处理请求。算是一类错误码。
400 Bad Request
:是一个笼统的错误码,具体原因不清楚,没有明确返回。
403 Forbidden
:是服务器禁止客户端请求当前资源。
404 Not Found
:这个很常见,表示客户端请求的资源在服务器不存在。
5xx
5xx是服务器错误,客户端请求报文没问题,服务器内部出错了。常见状态码有:
500 Internal Server Error
:这也是是错误的通用返回错误码,具体错误未知。
501 Not Implemented
:功能未实现。
502 Bad Gateway
:服务器作为网关或者代理时出现的错误,服务器本身服务正常,但访问的后端服务器发生了错误。
503 Service Unavailable
:表示当前服务器很忙,暂时无法响应请求。