http状态码是在客户端向服务器端发送请求时,用于说明返回的处理结果,成功或失败,失败的原因。
http状态码由三个数字组成,第一个数字表示类别,后面两个数字只是用来标识某一结果,并无特别的意义。
1XX----------表示正在处理请求,尚未处理结束
2XX----------表示处理成功
3XX----------表示处理时需要浏览器一些附加条件才能成功,多数为重定向
4XX----------表示处理失败且主要原因是客户端的原因
5XX----------表示处理失败且主要原因是服务器端的原因
http状态码有很多,这里列出常见的状态码
100:表示服务端已经收到请求的一部分,要求客户端发送其他部分
101:表示服务端收到客户端修改协议的请求并修改了协议,如客户端发起修改协议为websocket的请求时,服务端就会返回101的响应
200:表示客户端发送的请求被正常处理了。但是正常处理不代表符合预期,在发生跨域的时候返回的状态码也是200,所以无法通过状态码来判断跨域。(跨域问题解决)
204:表示客户端发送的请求被正常处理,但响应报文中不含实体的主体部分,可看成是服务器端没有返回资源给客户端,一般在只需要往服务器端发送信息的场合使用,此时的响应报文只起告知响应成功的作用。
206:表示客户端进行了范围请求,而服务器端正确处理了该请求。这种情况下请求报文中会包含Range首部字段,而响应报文中会包含content-Range首部字段,这两个首部字段都指向要返回的指定的实体范围。
301:永久性重定向,表示该客户端请求的资源的URI地址已经被永久性修改了,旧的地址已经被永久删除了,此时服务器端的响应报文会包含location首部字段,location的值为新的URI地址,客户端会再向该URI地址发送请求已得到需要的资源。
302:临时性重定向,表示请求的资源已经被分配了新的URI,不同于301的是旧的地址没有被删除,只是在本次请求中“希望”通过新的地址来访问资源,所以会同样在响应报文中带有location以返回新的URI地址供客户端发送请求。(这里的“希望”关系到搜索引擎如何抓取网址)
303:该状态码表示的结果与302相似,请求的资源存在另一个URI,“希望”在本次请求中访问另一个URI,不同的是,303明确指出要使用Get方法获取资源。
304:该状态码表示请求报文中有附带条件的首部字段,且服务器的资源不满足附带的条件。(有附带条件的首部字段以If开头,不满足条件返回304的首部字段为If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一种)实际上,平时我们常说304就是缓存就是因为不满足If-None-Match或If-Modified-Since,而返回304只会在使用get和head请求时才会返回
400:该状态码表示请求报文中出现语法错误,在HTTP1.1中,如果请求消息中没有Host头域则会报告一个400错误
401:该状态码表示发送的请求需要有通过HTTP认证的认证信息,如果客户端第一次发送请求时返回了401,那么就要使用首部字段Authorization将身份认证的信息发送给服务器端,若认证成功则返回状态码200,否则再次返回401表示认证失败
403:该状态码表示发送的请求被服务器端拒绝了,服务器端可在响应报文中写出拒绝的理由,当然也可不写。可能出现的错误是以http的方式需要ssl连接的网址;在不允许写/创建文件的目录中执行了创建/写文件操作;连接的用户过多,可以过后再试;IP被列入黑名单等等
404:该状态码表示发送的请求对应的资源不存在
405:请求方法(GET,POST,PUT)对资源不适用
412:请求头中一些前提条件不成立,如我们在请求时带上If-Match,而服务器无对应ETag的资源,就会返回412状态码的报文,表示If-Match条件失败,看起来和304类似,不同的地方在于,412只在get和head之外的诸如post,put请求时返回,get和head返回的是304
500:该状态码表示服务器端在执行请求时出现了错误
503:该状态码表示服务器端暂时处于超负载或者停机维护的状态,可以看成服务器端“无暇”处理该请求,服务器端可在响应报文中使用Retry-After首部字段告知客户端何时能再发送请求给服务器端