一个基于http协议的优化

2015年12月14日 12:38 阅读 36824
某天,@沐然的爸爸 和我说起一件很奇怪的事情,微博在三家运营商(联通,电信,移动)之间的流量对比很奇怪,移动相对另外两家相比,他的http response流量有点高。至于有多高,在移动的http请求量和联通不相上下的前提下,移动的http response带来的网络流量是联通的2.5倍。


于是,我统计了两家运营商下的服务器的访问量比较大的http接口的response size。结果显示,并不仅是某一个具体的http接口有明显的区别,而是很普遍存在的现象。好吧,那我就从其中一个接口入手。


还是分别在联通和移动各选择一台server,使用tcpdump抓取http的数据包。通过抓取的数据,我看到了一条珍贵线索,下边附两张截图,图1是联通的http response,图2是移动的http response。

图1

图2

 

可以看出,移动的response body没有像联通一样做gzip压缩。通过人肉简单的统计,移动大概有3成的请求都没有做压缩,而联通几乎都是经过压缩的。至此,我觉得文章一开始看到的流量差距的原因找到了。但是很奇怪为什么移动有30%的response body不做压缩,我们两边在服务器端的配置是一样的,于是我把精力放在了对比客户端的请求特征上。几经对比,还是发现一些规律。那些没有经过压缩的http会话都是走了1.0的协议,相反经过压缩的http会话都是走了http1.1协议。带着这个线索,我翻阅了http server的官方文档,果然官方在做gzip压缩时,默认情况下只对走http1.1的会话进行压缩,如果需要压缩1.0对应的会话,需要修改默认配置。在经过简单的测试后,确认修改后的配置没有对现有功能有影响后,我们顺利的做了对应的配置变更。变更后整个移动的http response网络流量瞬间下降了至少一半,就像图3显示的一样。

图3

 

至此,我有一个小疑问,为什么同样的客户端,移动会有这么多的http 1.0的请求,难道移动的网关会和另外两家运营商有很大的区别?不知道有没有懂这个的朋友给出解释。另外我也在想,通过上边的优化,从此访问手机微博时,中国移动的用户不仅网络流量会省掉一半以上,而且由于少走一半的tcp数据包,是不是刷微博的感受会变好一些,特别是2G网络下的用户。