写在前边的话
大家好,我是风落,一个“写得了代码,测得了系统,管得了服务器,怼得过产品经理”的一线资深“码农”。
当慕课的编辑第一次跟我跟我聊到:风落,有没有兴趣做一个HTTP协议的实战课程啊。我下意识的感觉:HTTP协议有什么可以讲的?
转念想了一下,如果让我马上说出来HTTP协议有哪些内容,我一时间又不知道从哪里说起。只是在工作中,哪里不会搜哪里。
于是我真的去找了很多同事去聊天,去讨论。发现大家都对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学习的难度
和“想说就说”、“想唱就唱”不一样的是,“想学就学”的难度大了很多。
我们可以把HTTP学习中的问题分为四点:学习资料繁杂、体系内容缺失、网络课程表面、学习过程枯燥。
不管你想学Java、Python,或者是MySQL、VUE,京东一搜,都有一大堆。但是HTTP,不好意思,资料甚少。百度或者谷歌一下呢,资料又真是很多,繁杂的不要不要的,让人不知从何入手。
有心到网上学习一下吧,随便搜一搜,发现几个大的在线视频网站倒是都有HTTP的课程,我也大体看过一遍,不过都有个特色,那真是太过于简单和表面,都是知识点,都是照本宣科,理论不全还实践不足,实在是无法接受。
勉强拎出来一个听一听吧,这种偏底层原理的东西讲起来看起来又过于枯燥,学习了一个小时,昏昏欲睡,毫无兴趣,脑袋里根本无法存住信息量巨大的知识。
那么,该怎么学习HTTP呢?
专业打造的课程
基于HTTP的重要性和想要学习的难度,我想大家想要的HTTP课程大概是这样的:体系明确、脉络清晰、内容全面、贴近工作、讲解诙谐。
《大话HTTP协议》是一个专门为这个要求打造的课程。
全面性:课程会把HTTP这么庞大的知识内容给整合起来,包含什么呢?从HTTP协议基础、报文结构、请求响应模型、方法、状态码到会话管理、通讯原理、编码解码、基本认证、长连接短连接、代理、网关、缓存、内容协商、断点续传再到HTTPS、SPDY、HTTP2.0、WebSocket、WebDAV、QUIC等等等等。
体系化:由于HTTP的知识体系很是庞杂,我们把它进行了一番整理,分成了七大模快,通过庖丁解牛的方式,把HTTP的知识体系梳理得更加清晰。
趣味性:这么多内容,还很多是偏原理的,会不会很难懂,会不会很枯燥啊,确实,以往很多的底层原理课程大多枯燥乏味,让本来就难懂的知识更加难掌握。所以呢,在这个课程中,我们增加了一条主线,不知道大家上面看到介绍的章节名称时候有没有注意到,有那么一条主线的核心叫做“相亲的故事”。
我们的七个篇章叫做初相识、再邂逅、渐相知、紧相伴、静相依、长相随和终相守,想想这是不是我们恋爱的一生啊,实际上对知识的学习也是一样的道理--循序渐进,由浅入深。
应用性:“纸上得来终觉浅,绝知此事要躬行”,所以我们还要理论联系实际,做到知行合一,在学习的过程中会有多个实战,包括动手去自己编写和搭建一个HTTP服务器,再将HTTPS的安全应用到我们的服务之中,更会着眼未来,看看如果想升级到HTTP2.0应该怎样去做,在实战中汲取更多的养分,更好的吸收学习到的理论知识。
BE A HTTP EXPERT
互联网的变化和发展决定了做为“程序猿”、“测试媛”、“运维狗”的我们注定要不断的学习,新技术、新语言、新架构包括新的HTTP3.0乃至是未知的新领域,这都是需要我们去不断学习、不断提升的。
掌握《大话HTTP》是你打磨互联网开发、测试、运维的基础,“不积跬步无以至千里”,只有一步一步的走下去,才能走的更稳,走的更远。同样,HTTP的掌握更能够让你在面试中“一招致胜”,展现你比其他人更强的能力。
最后,还是要说,“千里之行始于足下”,从这篇手记开始,我们从HTTP基础做起,“骑骥一跃,不能十步;驽马十驾,功在不舍”。所以我们用一句祝福或者说是希望做为结尾:
BE A HTTP EXPERT!
热门评论
太君你这个文笔我是服的
这文笔太有逻辑了,太能鼓动学习了
太君你这个文笔我是服的