前端基础HTTP知识学习之HTTP状态码

Posted by Lxxyx on 2016-04-11

起因

之前我在我的2016,寒假前端学习计划中,发现自己对HTTP的知识很不熟悉。而作为一个前端,应该对HTTP知识了如指掌。
这也是三月份我在找实习的过程中,和几家公司的CTO交流中,他们给我的指点与建议。很感激他们对我的帮助,让我了解到自己知识的漏洞。
在补习HTTP相关知识的时候,我手头上有两本书,一本是《图解HTTP》,另外一本是《HTTP权威指南》。
在这儿比较推荐前端初学者,去看《图解HTTP》这本书。
《图解HTTP》
就是图里这本书,整本书深入浅出,书里面的图示非常多。所以整本书读下来非常轻松,却又能恰好掌握HTTP的基础知识。所以我在读的时候,一口气记了十几页的笔记。

那学习HTTP知识,最大的好处就是当前后端交互出错时,至少知道是前端的问题还是后台的问题。这样能省下很多扯皮的时间。(对于我来说)

HTTP与前端

既然作为HTTP的基础知识,我们这儿就不介绍HTTP的起源,发展,与TCP/IP啥啥啥的关系了,有兴趣的同学可以自己看《图解HTTP》或者《计算机网络》这本书。
作为前端,最多接触的HTTP知识是什么?我认为,是状态码。
作为一个前端,使用Ajax完成前后端交互,通过Chrome控制台的Network来看资源加载情况等事情,简直和家常便饭一样。
比如说,看到 404 就知道这个资源没能加载出来,而看到200就知道这次加载稳了。
曾经的我,对于HTTP实际应用的大概了解,就只有这些了。但是这些还不够呀。所以在看完《图解HTTP》时,就过来分享一些我HTTP知识的盲点,希望能对大家有所帮助。

HTTP常见状态码分类

大家都知道,在进行请求时,会产生各种各样的HTTP状态码,所以在这儿,首先要介绍的就是HTTP的常见状态码。
最常见的,就是HTTP 2XX - 5XX了。
这儿,我列了一个表格,来描述

HTTP状态码 状态码 原因解释
2xx 成功 请求正常处理完毕
3xx 重定向 需要附加操作
4xx 客户端错误 服务器无法处理请求
5xx 服务器错误 服务器处理请求出错

关于各种状态码的意义,在这儿就一目了然了,比如说,发生4XX时,一般是前端的锅。发生5XX时则是后台的锅。
当要设置页面重定向时,应该设置3XX的状态码,而不是在原网页上使用

1
location.href = 'http://xxxxx'

这种方式。(别笑,真的见过这样的……)

常见状态码

这儿,我将会记下几个常见的状态码,虽然《图解HTTP》这本书提供了14个常见的HTTP状态码,但是对我来说,可能知识盲点和常见的也就那几个。
所以这儿就着重介绍他们,如果想了解详细的,各位可以自行借阅或购买《HTTP权威指南》这本书,绝对满足你的需求。

2XX - 成功

在这儿,首先介绍的是HTTP 200,200的意思很好理解,就是客户端的请求已被处理完毕。

204 - No Content

这个呢,代表服务器请求已被成功处理,但是返回的结果中,是不带实体信息的。

206 - Partial Content

表示范围请求,既返回的实体信息只是一部分。比如,返回某张照片的下半部分,某个文本的最后几行。用得好的话,可以大大节省网络传输的流量,达到指哪打哪的效果。

3XX - 重定向

这部分,其实是有点绕的。不过仔细看看,想一想也能很好的分辨。

301 - 永久重定向

永久重定向,告诉客户端以后应从新地址访问。同时书签(如果有的话)也应该更换为新地址。

302 - 临时重定向

告诉客户端我换了位置了,但你还可以用这个地址来访问。现在基本重定向,返回的都是302状态码。

303 - 临时重定向 - POST请求改为GET

对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。

307 - 临时重定向 - POST请求不变

对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。

304 - Not Modified

这个算是很重要的状态码,常见于网站的缓存处理中。
这儿,我摘抄了维基百科的解释:

如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。

304的作用,还是很大的。简单点说就是:我给你发送请求,查看我本地这个资源是否是最新的,如果是,服务器就返回304。浏览器从本地读取缓存,而不用去服务器上请求资源。
想深入了解的话,可以阅读这篇文章: [译]理解HTTP/304响应

4XX - 客户端错误

这部分属于客户端错误,也就是说如果出错了,很大可能是前端的锅。

400 - Bad Request

该状态码表示请求报文存在语法错误,需要修改。

401 - Unauthorized

代表请求未经认证,不给过。

403 - Forbidden

服务器拒绝请求,但是不想告诉你理由。

404 - Not Found

哈哈,这个就是大名鼎鼎的HTTP 404 Not Found 状态码。
这个状态码有两层意思,第一层是请求的资源未找到,第二层则是和HTTP 403一样,服务器拒绝请求,但是不想告诉你理由。

5XX - 服务器错误

这部分属于服务器错误,也就是说如果出错了,则是后台的锅。

500 - Internal Server Error

Internal Server Error翻译成中文就是服务器处理请求出错。也就是后台那儿出了问题,所以发送了500给你。
这种时候,放心的找后台报BUG去吧。

503 - Service Unavailable

这个状态码,则是告诉你现在服务器暂时无法处理你的请求,你待会儿再试试。
当然,出现这种问题,一般也可以直接找后台。

总结

今天所写的HTTP状态码,只是HTTP整个知识的一部分,但却很重要。熟悉常见的HTTP状态码,能帮我们快速定位问题,同时如果你是后台,给出正确的HTTP状态码,也方便自己将来DEBUG。

话说这儿得吐槽一句,那就是七牛的图片上传工具不太方便。在Windows下还好,有个图形界面,自动监控文件夹内容就自动上传的。
但是在Mac和Linux下只有纯命令行界面的工具。很是不方便。于是在写这篇博客时,自己用Gulp写了个小工具,专门配合七牛的Node.js SDK,实现自动监控文件变化并上传。
怎么说,既然选择做程序员,那么能让电脑帮你完成的,就不要动手啦。
况且,这个博客从配置完成的那一天起,我就基本没有折腾过。因为只是想安安静静的写博客而已,目前HEXO和这个主题的效果就挺好的。博客博客,最重要的还是里面的内容。

就酱~