SPDY到底有多快?

SPDY是什么?

SPDY是谷歌在2009年为了提高页面加载速度而提出和部署的一个针对HTTP消息的新传输方式,即是对HTTP协议的增强。SPDY增加一个SPDY会话层,用于数据流的多路复用、Web对象的请求优先级和主动推送、HTTP报头压缩等一系列新的功能。

SPDY很快就成为了Web一个重要的协议,一些著名的网站诸如谷歌,Facebook、Twitter都已经部署了SPDY,还有Google Chrome、Chromium已经支持SPDY,Mozilla Firefox自11.0开始内嵌支持SPDY,从Firefox 13开始默认开启对SPDY的支持。值得一提的是IETF对谷歌提出的SPDY协议进行了标准化,于2015年5推出了基于SPDY协议的 HTTP 2.0 协议标准(简称HTTP/2),因此上述的浏览器或Web服务器可能已经放弃对SPDY协议的支持,转而支持HTTP/2。

SPDY的特征

1)单一TCP连接:SPDY允许在一个连接上复用多个HTTP请求和响应。这里的复用类似于HTTP / 1.1流水线,但是更细化。 单一连接也有助于减少SSL开销。 除了客户端得益之外,使用单个连接也有助于减少在服务器上打开的TCP连接的数量。同时,因为请求在一个通道上,TCP效率更高;网络连接更少;同时也发出更少更密集的数据包。
2)请求优先级:一些Web对象例如JavaScript代码模块,会比其他模块更重要,因此需要被优先加载。SPDY允许客户端为每个对象指定一个优先级,然后由服务器用来调度对象的传输。这可以防止在网络通道被非关键资源堵塞时,高优先级的请求被挂起。
3)服务器启动流:服务器启动流能用来分发内容到客户端,而不需要客户端发起请求。此选项可以由Web开发人员通过如下两种方法配置:
Server push:SPDY允许服务器在客户端请求资源之前,推送资源。这减少了等待时间,但如果对象已经在客户端缓存,会增加传输的数据。但是对于初始页面下载(例如用户初次访问这个网站),这样能大大提升用户体验。
Server hint:相对于自动推送资源到客户端,在服务器事先知道客户端需要的资源的情况下,服务器使用X-Subresources头建议客户端请求特殊的资源。但是,服务器仍然在发送内容前等待客户请求。通过窄带,这个选项能减少一个客户端发现它所需要的资源的数百毫秒,这个方法更适合于非初始页面加载。
4)报头压缩:SPDY压缩请求和响应HTTP报头,从而减少传输的数据包数量和字节数。

实验过程

首先,把SPDY和HTTP简化成一个传输协议(没有浏览器支持或者计算),用这两者来在合成的页面和真实的页面(Alexa sites中排名前200的网站)进行Web对象传输。作者使用决策树分析来辨别在什么情况下SPDY的表现比HTTP更好,反之亦然。作者发现在很多的场景下由于SPDY的单一TCP连接特征,页面加载时间显著地减少了。具体地说,SPDY通过以下方式有助于小对象的传输和低损耗率的实现:在TCP段中分批处理几个小物体; 减少拥塞引起的重传; 并减少TCP管道闲置的时间。相反,SPDY在大型对象传输的高丢包情况下会显着损害性能。 这是因为一组TCP连接在高数据包丢失的情况下往往性能更好; 有必要调整TCP行为来提高性能。

接下来,作者通过合并依赖项和计算延迟来检查完整的网页加载过程。由于以下的这些因素,SPDY的好处就减少了,甚至可以被否定:1)在给定的时间有未完成的对象少; 2)流量较少突发,比较平缓; iii)网络的影响因为计算更耗时而降低。总的来说,当带宽较少,RTT较长时,作者发现SPDY的好处更大。 对于这些情况,SPDY对于70-80%页面减少PLT,对于更短,更快的链接,效果不大,反而能会加PLT:对于RTT较长的网络来说,20%的最差的页面会增加至少6%的PLT。

可能的改进

SPDY在HTTP 1.1的基础上做了很多改进后,逐渐成为了HTTP 2.0的事实基础。HTTP 2.0又进行了一些改进。根据之前所述的SPDY的改进,更具体的HTTP 2.0改进了:

头部压缩算法。SPDY使用deflate算法,而HTTP 2.0 则使用HPack算法。HPack是专门为头部压缩设计的算法。使用2个索引表(静态索引表和动态索引表)来把头部映射到索引值,并对不存在的头部使用 huffman 编码,并动态缓存到索引,从而达到压缩头部的效果。

t018c45cb5d4f13a169.png

入口流量在HPack的作用下节省了53%,是一种非常高效的压缩方式。时至今日,我们在处理HTTP/1和HTTP/2的数量仍然是超过HTTPS的,但是HTTP/2的入口流量仅仅只是HTTP/1的一半。

SPDY HTTP/2
必需SSL 尽管IETF没有强制要求SSL,但是各大浏览器依然要求使用SSL
较快的加密速度. 未使用HTTP/2使用的ALPN扩展。 更快的加密速度. 使用了ALPN扩展
单主机复用 多主机复用
使用Deflate压缩方式 使用效率更高的HPack
有了初步的优先级算法 改进的优先级算法,对代理更加灵活和友好