趣解HTTP协议状态码
最近在开发,经常会用到HTTP协议的状态码,刚开始对请求返回的这些状态码很懵懂,相信很多初级开发者和我一样,但这些状态码对我们前后端联合开发又是十分有用,因为这能让我们更容易找出问题出在哪。经过自己去学习和了解,对常见的状态码有了一定的了解。
接下来,我以一个故事的形式,来帮助大家理解这些状态码。假如大牛想写一封信给他喜欢的女生小红,他让小猴帮忙去送。
这时候大牛相当于浏览器,小红相当于服务器,信件的内容就是我们发出请求的内容。
小猴来到小红家,在小红家门口喊出那句暗号:‘天王盖地虎!’这时候有很多种可能性。我们来依次看看这些可能性。
301状态码
假如小猴喊了很久没人开门,这时邻居出来,对小猴说:‘小红搬家了,搬到天河大道北123号’
这时候小猴要去天河大道北123号送信。这个过程就叫做**永久移动(Moved Permanently),对应的HTTP状态码是301。**如果我们的浏览器是将这个URL收藏了,那么当接收到301的状态码之后,浏览器应该会修改链接,修改为新的URL。当然3XX的状态码不只有301。
302状态码
如果小红暂时没有搬家,只是去闺蜜家住了
那么这种情况叫做临时重定向,对应的状态码为302。还有个状态码和302个功能很相似。
303状态码
如果邻居说,小红去闺蜜家住了,只给女生开门
这种情况中,小红去闺蜜家了,所以需要临时重定向,但是这种情况和302的临时重定向有什么区别呢?区别就在于请求的方式不一样。这里男生送信就是POST请求方式,女生送信就是GET请求方式。这时候的状态码就是303,表示需要临时重定向,并且必须用GET方式请求。
404状态码
当然还有很多的可能性:比如说小红根本就没住在这~
这种情况就叫做找不到系统资源,对应的HTTP状态码是大名鼎鼎的404。4XX家族还有很多状态
401状态码
还有一些很有趣的情况,比如小猴到了小红家,喊错了暗号,喊成了:“天王盖地鼠~”,小红拒绝开门
这种情况就是我们的协议格式出现了问题,这种情况下返回的状态码是:401
403状态码
再比如,思彤到了铁锤妹妹家,喊出了口号:“天王盖地虎!”,但是今天小红心情不好,就是不开门,让小猴走开,无论你怎么说好话也叫不开门
这种情况就相当于是服务器拒绝了请求,HTTP状态码为:403。但是这个状态很有趣,这个状态是可以在返回体中给出拒绝的原因,但是通常情况下,这个状态码是在服务器不想给出原因的情况下使用的。
503状态码
我们再假设,思彤到了小红家,但是小红正在打电话,没有空理小猴~
由于我们之前设定好的,大牛相当于浏览器,小红相当于服务器,所以这个时候的情况就是服务器繁忙。服务器繁忙对应的状态码是503。一般在服务器负载时会返回503状态码。
500状态码
小红对上了信号,小猴把信件给了小红,但这时候出现了一个问题,小红不认识字。没法继续下去。
前面对暗号的过程,就好像是解析HTTP协议的过程。后面读信件的过程就相当于是获取出数据之后进行处理的过程。但是由于小红不识字没法正常的读信。这就像是服务器程序出现了错误,在读取信件的过程中发生了错误。所以这个时候报出的HTTP状态码为:500
200状态码
我们假设小猴和小红对上了暗号,小红也认识字。小红给大牛回信了。
当浏览器要发送的内容被服务器端接收并处理之后,得到服务器端返回的消息。小红的回信就相当于是服务器端返回的信息。这样的一个来回就完成了一次HTTP请求。这个时候返回的状态码为:200