我们经常会听到HTTP协议,我们也每天都会用到HTTP协议,那么HTTP的面纱下到底是什么呢?我们今天就先来聊聊HTTP协议的状态码。
  我们继续上回的故事~上回书说到,成哥给邓哥介绍了一个女朋友(铁锤妹妹),然后害羞的邓哥写了一封信,让思彤帮忙送给铁锤妹妹。
  这个时候邓哥就相当于计算机世界中的浏览器,铁锤妹妹相当于计算机世界中的服务器。邓哥给铁锤妹妹送的信,就相当于是浏览器给服务器发送的请求,信件的内容就是我们发出请求的内容。
  思彤到了铁锤妹妹家,在铁锤妹妹家门口喊出那句暗号:“天王盖地虎!”。这时有很多种可能性。我们来依次看看这些可能性~
  1
  如果喊完暗号之后,没有人开门,这时候隔壁老王出来了,对思彤说:”铁锤搬家了,搬到了如花大街200号~“
  这时候思彤就要再去如花大街200号送信,这个过程就叫做永久移动(Moved Permanently),对应的HTTP状态码是301。如果我们的浏览器是将这个URL收藏了,那么当接收到301的状态码之后,浏览器应该会修改链接,修改为新的URL。当然3XX的状态码不只有301。
  2
  如果铁锤妹妹并没有搬家,而是暂时去闺蜜家住了。
  那么这种情况叫做临时重定向,对应的状态码为302。还有个状态码和302个功能很相似。
  3
  如果隔壁王大爷说,铁锤去闺蜜家住了,但是如果不是女生不给开门~
  这种情况中,铁锤妹妹去闺蜜家了,所以需要临时重定向,但是这种情况和302的临时重定向有什么区别呢?区别就在于请求的方式不一样。这里男生送信就是POST请求方式,女生请求就是GET请求方式。这时候的状态码就是303,表示需要临时重定向,并且必须用GET方式请求。
  4
  当然还有很多的可能性:比如说铁锤妹妹根本就没住在这~
  这种情况就叫做找不到系统资源,对应的HTTP状态码是大名鼎鼎的404。4XX家族还有很多状态
  5
  还有一些很有趣的情况,比如思彤到了铁锤妹妹家,喊错了暗号,喊成了:“天王盖地鼠~”,这时候铁锤妹妹听到这个暗号感觉外面有个神经病,这时候也不会给开门,直接让思彤走开~
  这种情况就是我们的协议格式出现了问题,这种情况下返回的状态码是:401
  6
  再比如,思彤到了铁锤妹妹家,喊出了口号:“天王盖地虎!”,但是今天铁锤妹妹心情不好,就是不开门,让思彤走开,无论你怎么说好话也叫不开门~(女生的心思你难猜~)
  这种情况就相当于是服务器拒绝了请求,HTTP状态码为:403。但是这个状态很有趣,这个状态是可以在返回体中给出拒绝的原因,但是通常情况下,这个状态码是在服务器不想给出原因的情况下使用的。所以这种情况很符合一个女生生气的情况~必然是有原因的,但是不会轻易告诉你~
  7
  我们再假设,思彤到了铁锤妹妹家,但是铁锤妹妹正在打电话,没有空理思彤~
  由于我们之前设定好的,邓哥相当于浏览器,铁锤妹妹相当于服务器,所以这个时候的情况就是服务器繁忙。服务器繁忙对应的状态码是503。一般在服务器负载时会返回503状态码。
  8
  思彤到了铁锤妹妹家,率先说出暗号:“天王盖地虎~”。铁锤妹妹答道:“邓哥一米五~”思彤:“宝塔镇河妖~”铁锤妹妹:“邓哥长不高~”对上暗号之后,思彤将信递给了铁锤妹妹~(思彤终于可以把信交给铁锤妹妹了~)但是这个时候出了个问题~铁锤妹妹不识字。。。这样就没法继续下去了。。。
  前面对暗号的过程,就好像是解析HTTP协议的过程。后面读信件的过程就相当于是获取出数据之后进行处理的过程。但是由于铁锤妹妹不识字没法正常的读信。这就像是服务器程序出现了错误,在读取信件的过程中发生了错误。所以这个时候报出的HTTP状态码为:500
  9
  我们假设思彤和铁锤妹妹对上了暗号,铁锤妹妹也认识字~铁锤妹妹仔读了这封信之后,给邓哥回了一封信。信的内容只有四个字:“做梦去吧~”。(经历了这么多的磨难,终于得到铁锤妹妹的回信了~)
  当浏览器要发送的内容被服务器端接收并处理之后,得到服务器端返回的消息。铁锤妹妹的回信就相当于是服务器端返回的信息。这样的一个来回就完成了一次HTTP请求。这个时候返回的状态码为:200
  10
  当思彤完成第一次送信之后,邓哥看到了铁锤妹妹的回信,觉得好桑心~于是决定再写一封信给铁锤妹妹。当思彤又一次送信给铁锤妹妹的时候,这次铁锤妹妹并没有直接回信,而是告诉思彤,还让邓哥看之前的那封信就行~(铁锤妹妹已经懒得写了~)
  当浏览器多次访问同一个资源的时候,如果第一次请求的结果还在缓存,还没有过期,那么在此访问这个资源的时候,为了减少网络传输的消耗,如果这个资源没有被修改过,则可以让浏览器继续使用之前缓存的内容,这样就不用再将资源发送一遍了,所以就减少了很多的网络开销。这个时候服务器返回的状态码为:304。虽然这个状态码也是3XX系列的,但是我们可以发现这个状态码看似和重定向没有什么关系~但是我们可以理解为,服务器要求浏览器将请求重定向到浏览器本身。
  以上的十个状态是HTTP状态码中最常见的一些状态码,也是我们Web前端初学者必须要记住的状态码。当然HTTP协议的状态码远远不止这些。我们之后讲HTTP协议的文章中,会更详细的为大家介绍HTTP协议。