先进的HTTP2.0
我们上网,2016年之前基本用的都是HTTP 1.1协议。渐渐的,浏览一个页面时需要加载的数据越来越多,图片、样式表、视频、js脚本,几十上百都很平常,于是页面加载速度越来越慢——HTTP 1.1本质上还是90年代的方案。
作为互联网流量大户的Google坐不住了,秉承着You Can You Up的淳朴理念,他们推出了SPDY协议,并利用自己掌握服务端流量——搜索引擎和客户端浏览器Chrome的上下游优势,开始部署。
在這一秒鐘幾十萬上下的時代,Amazon 的網頁載入時間每多一秒,該公司的年度營收就減少 16 億美元、Google 的搜尋時間每多 0.4 秒,每天的搜尋次數就會減少 8 百萬網頁、KISSmetric 分析報告指出等待時間超過 4 秒,Bounce Rate 就會增加 25%。人的思緒在等 1 秒後就開始飄移,如果需要等 10 秒,就會感覺這東西是不是壞了
-- from AlphaCamp
效果非常显著,节省了流量和服务器负载的开销,看到甜头之后,其他巨头纷纷跟进,一个更全面,面向新时代服务的HTTP2.0协议就出炉了。
好处有:
多路复用
HTTP基于TCP,作为网络传输的基石,TCP的可靠性是很多场合弃用UDP的主要原因,然而可靠性需要牺牲速度,任何一个连接发起都需要三次通讯握手,设想一下打开网易云音乐首页传输上百个小文件是多么的酸爽。
HTTP2则只会建立一个TCP连接,所有的文件传输都走这条路,而且提供了优先级比如样式表和js先走,图片视频最后。服务器节省了维护TCP连接的开销,客户端加载速度提高了,真是皆大欢喜。
默认开启ssl
国内的ISP如联通、电信、铁通等等,基本都干过流量劫持的勾当(*通:我有KPI要考核,我要赚钱,我用自己的实力劫持流量!)技术上很简单,就是在HTTP1的返回html里插入一段广告代码即可。
开启SSL之后,流量劫持生意就不好做了,估计有人恨得牙痒痒的,但没办法,落后生产力总会进垃圾堆的嘛!
压缩Header
HTTP1里文件头是不压缩的,在现在各种服务端中间件都喜欢往文件头里塞几行信息,一个请求可能只有10 Bytes的json数据,然而请求Header却高达600 Bytes......
HTTP2使用HPACK算法压缩之后,体积起码缩小了2/3。服务器和客户端都节省了流量费用,大善!
网站不能访问?
苹果的safari浏览器从2015年底开始支持http2,无论是iPhone上还是mac上,在和服务器握手的时候发现对方支持HTTP2,就会采用HTTP2去请求资源。
这本来是很好的做法,然而,昨天我常上的一个网站突然不能访问了,一看log:
全都是HTTP2的请求。然而改用chrome访问又是正常的(Chrome:言下之意我没有Safari先进?),突然想起,服务器端nginx里新增的http2是分开配置的,估计是网站管理员升级了webserver,默认打开了http2,然而http2的目录没有指向实际工作目录,于是就挂了。
接受新生事物需要时间
在这种需要开源软件开发者(nginx),网站管理员,浏览器提供商,用户反馈四方面达成一致的业务逻辑,至少还要好几年才能走上正轨。
其中主要的推动力量,还是用户反馈。只有不能正常上网的用户多了,错误反馈才会被网站重视,才会有后续的升级或者配置更新。
然而浏览器提供商也不可或缺:只有不断向用户提供最先进的工具,才能推动用户提高生产率。兼容IE6给业界造成的损失连始作俑者微软都觉得不好意思。
网管更是需要起码的新事物敏感度,升级完了web server,起码多找几个客户端测测吧?
作为开源软件开发者,提供了新功能,默认打开,是一种推广的姿态,牺牲的是对旧服务配置的兼容性,虽然这么做正确与否有待商榷,从推动历史前进角度是值得肯定的。
“历史是这样创造的:最终的结果总是从许多单个的意志的相互冲突中产生出来的,而其中每一个意志,又是由于许多特殊的生活条件,才成为它成为的那样。这样就有无数互相交错的力量,有无数个力的平行四边形,由此就产生出一个合力,即历史结果,而这个结果又可以看作一个作为整体的、不自觉地和不自主地起着作用的力量的产物。因为任何一个人的愿望都会受到任何另一个人的妨碍,而最后出现的结果就是谁都没有希望过的事物。所以到目前为止的历史总是像一种自然过程一样地进行,而且实质上也是服从于同一运动规律的。但是,各个人的意志——其中的每一个都希望得到他的体质和外部的、归根到底是经济的情况(或是他个人的、或是一般社会性的)使他向往的东西——虽然都达不到自己的愿望,而是融合为一个总的平均数,一个总的合力,然而从这一事实中决不应作出结论说,这些意志等于零。相反地,每个意志都对合力有所贡献,因而是包括在这个合力里面的。”
——恩格斯