首页 > 代码库 > 浅析SPDY

浅析SPDY

1.什么是SPDY?

简单地说,在SSL层上增加一个SPDY会话层,以在一个TCP连接支持并发的HTTP请求。也就是他能通过复用仅仅一条(或几条)TCP连接,在客户端与服务器间发送几十个请求或回应。

SPDY(speedy)是google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。不过在实际生活中的网站上我没发现有这么大的进步。老实说,我的测试表明SPDY仅比HTTPS快一点点,同时还比HTTP要慢。

2.原理及特征

在SSL层上增加一个SPDY会话层,以在一个TCP连接中实现并发流。

技术分享

通常的HTTP GET和POST格式仍然是一样的;然而SPDY为编码和传输数据设计了一个新的帧格式。
流是双向的,可以在客户端和服务器端启动。
SPDY旨在通过基本(始终启用)和高级(可选启用)功能实现更低的延迟。
基本特征
  • 复用流:SPDY允许在一个连接上无限制并发流。因为请求在一个通道上,TCP效率更高:更少的网络连接,发出更少更密集的数据包
  • 请求优先级:虽然无限的并发流解决了序列化的问题,但他们引入了另一个问题:如果带宽通道受限制, 客户端可能会因防止堵塞通道而阻止请求。为了克服这个问题,SPDY实行请求优先级:客户端从服务器端请求它希望的项目数量,并为每个请求分配一个优先级。这可以防止在网络通道被非关键资源堵塞时,高优先级的请求被挂起。
  • HTTP报头压缩:SPDY压缩请求和响应HTTP报头,从而减少传输的数据包数量和字节数。
高级特征
SPDY提供了高级特征:服务器启动流。服务器启动流能用来分发内容到客户端,而不需要客户端发起请求。此选项可以由Web开发人员通过如下两种方法配置:
  1. Server push:SPDY通过X-Associated-Content头试验了服务器推送数据给客户端的选项。这个头告诉客户端服务器将在客户端请求资源之前,推送资源给它。对于初始页面下载(例如用户初次访问这个网站),这样能大大提升用户体验。
  2. Server hint:相对于自动推送资源到客户端,在服务器事先知道客户端需要的资源的情况下,服务器使用X-Subresources头建议客户端请求特殊的资源。但是,服务器仍然在发送内容前等待客户请求。通过窄带,这个选项能减少一个客户端发现它所需要的资源的数百毫秒,可能更适合于非初始页面加载。

3.然而SPDY的测试表现并非如此

SPDY有许多原因没有改善性能,但以下两个问题很明显:

1.域名使用过多

Web页面使用许多不同的域,SPDY在每个域都要建立连接。这意味着在多个跨域请求的时候SPDY并不能减少连接此时SPDY的价值会减弱。

2.资源阻塞

Web页面的其他瓶颈导致SPDY无法发起请求。例如,SPDY无法预防脚本阻塞,也不能使CSS无阻塞渲染。SPDY比HTTP好,但大多数页面的瓶颈不在HTTP协议上。

加载一个网页并不是简简单单的并行下载完所有资源就搞定了。比如说当加载一个网页时,浏览器一般不会下载任何图片,除非JavaScript和CSS文件获取完毕并得到处理。CSS文件也有可能导入其他CSS文件,浏览器还没先进到能预测这种情况。有些脚本也会产生需要浏览器加载的新资源。
SPDY对这种延迟无能为力,并且总的来说我能断定相关的浏览器行为并无改变。对于许多(要么就是大多数)网页来说,这些延迟才是真正的瓶颈,只留下极少的空间给SPDY发挥。 

浅析SPDY