作者| 慕课网精英讲师 风落几番

写在前面的话

大家好,我是风落,一个“写得了代码,测得了系统,管得了服务器,怼得过产品经理”的一线资深“码农”。

最近发现大家对HTTP协议的系统学习有一定的需求,很想有个机会好好补补课,这里边有刚入行的年轻人,也有入行多年的老鸟,有开发、测试、运维,也有产品经理、项目经理,甚至还有架构师。

为什么呢?

首先,这是一个互联网的时代。互联网改变了很多事情,10 年前我们还在用 1 毛 1 条的短信互相联系、查资料还需要到图书馆里、初到陌生城市还需要先买一份地图;现在呢,有方便实时沟通的微信,有无所不知的百度,有遍及各地的地图,当然更有出门几乎不用带钱的支付宝。互联网的薪水也在水涨船高,应届生年薪几十万的新闻层出不穷。

而这些,无一不依赖于互联网,而互联网更加依赖于基于HTTP协议的编程。可以毫不夸张的说,互联网的世界一大部分是在HTTP之上建立起来的,就如同没有HTTP,相信大家都没办法看到我这篇文章。

然后,HTTP似乎只是表面上简单,而底层的机制、工作原理非常复杂,我们之所以忽视它,只是因为它太过于“常见”,就像我们很容易忽视生活中的空气、很容易忽视你的父母一样,太常见的往往容易被我们忽视。

最后,就是我们要讨论的关键了:HTTP很重要,深入学习很有必要。

计算机技术≠编程技术

其实现在很多人心中存在着这样一种误区:计算机技术等于编程技术。

即使没有这样的想法,在潜意识中也会有这样的认知。我在参加某一个互联网大会的时候,发现很多看客对于别人的评价很多是:这个人的 Java 写的很牛!那个人的 Python 超强!

这就让我很诧异了,刚好,我除了码农以外,还有另外一个身份:讲师。偶尔去大学校园中讲课,随手抓了几个计算机、软件专业的学生,聊起这个话题,竟然发现,大家认为的“程序员”、“IT工程师”也是以编程为主的,甚至他们学习过程、看书过程都是以编程能力优先,至于其他的课程,比如计算机原理,比如HTTP,基本不太放在心上。

然而,编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的人是coder。计算机技术包括了多媒体,计算机网络,人工智能 ,模式识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程,只是把某些思路转化为代码的过程。编程的人其实不一定对计算机技术的了解就一定很高。就像袁隆平,致力于杂交水稻技术的研究、应用与推广,发明“三系法”籼型杂交水稻,成功研究出“两系法”杂交水稻,创建了超级杂交稻技术体系,但是如果你只去做种水稻的农民,完全不需要这些知识体系,掌握耕作的能力就好了。

有趣的是,很多人的职业规划并不只是程序员,而是管理者、架构师,至少,也想做一个优秀的“软件工程师”。优秀的工程师,与普通工程师,最大的区别,其实就在于基础的掌握。

如果你现在是一个程序员或者志在成为一个程序员,那么:

你在HTTP的消息头里加上了keepalive,可是它有什么意义,又是怎么样工作的?

你需要做一个断点续传的功能,HTTP协议又是怎么支持的?

大家都说缓存会提升性能,它是什么原理?怎么这么多乱七八糟的参数?

老板让你顺应时代潮流,把网站升级到HTTPS。那又是什么?什么SSL、TLS,什么加密证书,这又都是些啥?

再深入一点,你想深入一些,做个更高级的程序员,想要做一套restful的架构设计?

聊个真实的例子,我有个朋友,代码能力还是很不错的,也很受领导赏识,某一天,领导让他搞一套解决方案把现有的那套WebSocket的东西给替换掉。整个人都惊呆了,因为虽然技术达到了一定高度,但是对于WebScocket的架构,不但一窍不通,甚至不知道WebSocket协议本身就是与HTTP协议息息相关的。所以,从评估、分析到设计实现,方案几经推翻。最终还是使用了类似于HTTP的基于TCP协议之上进行设计,远比最早重复造轮子的效果好的多。

换个角度,如果你现在想做一个优秀的测试人员呢?

同样的,我们说几个场景:

接口API测试怎样进行?怎样验证接口逻辑正确性?如何理清楚HTTP的报文、结构和返回码?

你在进行性能测试的过程中,发现服务器上有很多状态为Establish的TCP连接,这是为什么?怎么优化?

老板安排你搞一下安全测试,你拿出了APPSCAN、WEBINSPECT,扫出了一大片问题,开发问你,这是啥?咋改?你看着一堆莫名的XSS、CSRF、会话管理问题,“默默无语两行泪”。

同样的,让一个运维人员去操作升级HTTP2.0、让一只项目经理去评估某个接口改造的估时,无一不需要你对于HTTP有着更深入的认识和理解。

虽然大多数从事开发的同学都是忙碌于业务逻辑的开发,测试同学疲于功能实现的测试,运维同学忙着解决线上问题,这样的情景并不会常常出现。但是,要想在用起它的时候“信手拈来”,要想在众多的工程师和激烈的竞争当中脱颖而出,想在互联网的大潮中寻找属于自己的一朵浪花,扎实的HTTP基础知识也是必不可少的。甚至可以这么说,面前的工作只是你的现在,基础的扎实才决定了你的高度。

所以大家一定要努力学好HTTP,对未来的发展锦上添花。