HTTP/2已经渗入普通人的生活。如果你平时多个心眼,会发现很多网站已经悄然采用了HTTP/2,享受了HTTP/2带来的诸般好处,甚至在一些技术大会上已经有相关的主题分享。
另一方面,大家对它的了解还相当粗浅。从我主持面试的经历来看,在我认为“应当了解HTTP/2”的候选人——不管后端还是前端——当中,大部分人还处在“听说过有这么回事”的阶段,只有不到20%的候选人能够说出一点实质性的内容。如果继续问“HTTP/2和HTTPS是什么关系”“从HTTP/1.1升级到HTTP/2有什么要注意的”“HTTP/2为什么不叫HTTP/2.0”,能答上来的人就寥寥无几了。
为什么会出现这种情况?我觉得和HTTP/2的中文资料匮乏有关。
纵观近年来的中文技术图书市场,无论是涉及的领域,还是作品的质量,都有明显的进步,众星捧月追求英文原版的情况已经是过去时。这对广大技术从业者来说,无疑是好事。但是另一方面,这种情况也间接造成了中英文技术资料的割裂:没有中文图书,大家最多看看网上的文章,没有那么多人愿意去研读英文图书了。关于HTTP/2,到目前为止,还没有看到过任何中文图书。
难道是因为HTTP/2不重要吗?答案显然是否定的。
我最早进入互联网行业时,仅仅满足于“写好程序在网上能跑就行”。随着工作经历的丰富,我越来越深刻地意识到,只要你在这个行业从事技术,无论是前端还是后端,网络相关的基础知识这一课终究是躲不过去的。无论是服务器端要面对的大负载和高并发,还是客户端要面对的有限计算资源和弱网通讯环境,最后都离不开对网络的深入理解。
对TCP/IP的了解越深,我们往往越会感叹其层次设计的巧妙。各种新出现的优化并不会破坏原有的体系结构。但是,对HTTP的了解越深,我们往往越会感叹它的过时——Web的发展太迅猛了,如今来看,定稿于1999年的HTTP/1.1只会让人想起“上古卷轴” 。所以,大家才会想出各种“优化黑魔法”来避开HTTP/1.1的各种限制和缺陷。域名拆分、资源域名分离、精灵图(用CSS选择大拼图中的小区域)等,都是如此。
不幸的是,这些“高招”往往并非标准统一的解决方案,所以并不能直接放心享用。和CDN厂商打过交道就会知道,网络设备成千上万,规范的实现程度也参差不齐,由此产生形形色色的问题,简直让人不胜其烦。再加上各种“优化黑魔法”,只会让本来杂乱的网络世界变得更加混沌。除非自己技术实力足够强,否则只能望洋兴叹。
有没有造福大家的统一的解决办法?Google先揭竿而起,制订了SPDY规范。继而大家才发现,原来所有人都在翘首期盼新的HTTP协议。于是,HTTP/2顺理成章地诞生了。虽然制订过程是漫长而痛苦的,但首部压缩、分帧传输、服务端推送等新特性,直击HTTP/1.1这种“古董协议”的痛点,让广大开发者大呼过瘾,迫不及待想要投入HTTP/2的怀抱。
然而,天下没有免费的午餐。要想享受HTTP/2带来的诸般好处,“简单升级”协议是行不通的。没错,HTTP/1.1显得简单直白,相当一部分的开发人员甚至把它理解为一问一答的简单通讯模型(和编程语言中的方法调用一样),也不妨碍自己的开发。可惜,HTTP/2不能这么玩。首部压缩等应用层特性或许还很好懂,但是,新出现的帧传输层绝对要花一番功夫才能理解。不理解这些新特性背后的原理,许多时候就没法调试;不能调试,很多问题就束手无策;束手无策,就无法享受新技术带来的诸般好处。
所幸,《HTTP/2基础教程》中文版面世了。在我看来,这本书相当适合作为广大开发人员了解HTTP/2的资料,大家也确实需要这样一本书,理由如下。
第一,它的范围足够广,HTTP/2中有价值的新特性基本都有覆盖,不是就概念而概念,而是会讲解各种新特性适合哪些场景以及不适合哪些场景。比如,如果你的网站大量引用第三方资源,那么域名拆分能带来的获益就相当小。
第二,它的编排很用心,不是单纯罗列HTTP/2的好处,而是通过与HTTP/1.1的对比加以讲解,更有一章专门讲解从HTTP/1.1升级到HTTP/2的一般过程,以前做的优化哪些必须变更、哪些可以保留,翔实可靠。比如,精灵图这种优化手段依然有助于提升响应速度,但会丧失缓存的便利性。
第三,它不是简单通过定性分析来论证HTTP/2的好处,而是大量使用了定量分析的方法。HTTP/2比HTTP/1.1要好,到底好多少,提升的幅度会受哪些因素的影响?书中对这类问题都给出了严谨详细的分析。我读了这本书才知道,光在光纤中的传输速度只有真空中的2/3。
第四,作为一本优秀的技术图书,其中的分析和思考会让读者在今后的工作中获益更多。本书不仅告诉读者HTTP/2的首部压缩采用的是HPACK算法,还讲解了为什么采用HPACK而不是沿用SPDY的gzip算法。我相信,如果了解了CRIME漏洞的原理,我们在今后的工作中会有更多样的思考角度,以及更完善的安全意识。
当然,这本书也不可能完整覆盖所有细节。关于HTTP/2,我一直有个疑问:既然HTTP/2有那么多好处,目前在内部网络里广泛使用的RESTful服务是不是可以享受到?但是在内网大规模部署HTTPS证书又是一个挑战。所以,出现了H2C(不带HTTPS的HTTP/2)。虽然据我所知H2C已经有一些成功案例,但是相关的资料却非常缺乏。我期待着,本书的下一版会加入这些内容。
《HTTP/2基础教程》的两位译者罗正龙、郑维智都是沪江优秀的前端开发工程师,本身就对HTTP协议有丰富的开发经验,对工作也有高度的责任感,在繁忙工作之余迅速完成了这本书的翻译。我在审校过程中,经常发现他们就书中的具体问题展开细致的讨论——因为不满足于“翻译文本”,更注重理解和思考背后的原理,所以发现了原书的若干错漏,也确定了很多符合中文开发者习惯的更容易理解的表达方式。我敢说,在今天的中文技术图书译者里,有这样认真精神的人,不超过十分之一。有这样的精神为支撑,图书的翻译质量是有保证的。
写完这篇文章的时候,我再次确认了一番,目前中文技术图书里确实还没有任何一本HTTP/2的专著。如果没有估计错误,《HTTP/2基础教程》中文版的出版仅仅落后英文原版半年左右,不出意外的话,它应当算中文世界里第一本HTTP/2的专著了。我相信,它的质量不会辜负“第一”的名次。
大仲马说过,人类的一切智慧都包含在两个词里——等待与希望。你是不是深深被HTTP/1.1所困扰,面对HTTP/2又有困惑?那好,现在《HTTP/2基础教程》中文版终于要和读者见面了,让我们共同期待HTTP/2的美好未来吧。
现在这本书已经在当当、京东、亚马逊全面上架,点击“阅读原文”可以直达京东购买链接。