为我们准备的SPDY

jopen 9年前
   <blockquote>    最近周围关于SPDY的讨论很多,它是Google提出的一个新的协议,用来加速Web网络访问。大多数     <a href="/misc/goto?guid=4958348483438313071" rel="nofollow" target="_blank">主流</a>      <a href="/misc/goto?guid=4958348484241706914" rel="nofollow" target="_blank">浏览器</a>和     <a href="/misc/goto?guid=4958348485035553244" rel="nofollow" target="_blank">Web服务器</a>已经开始发布支持SPDY的版本。所以我觉得去探索更多关于SPDY的知识和它对我们Web开发者的影响是值得的。    </blockquote>    <b>什么是SPDY?</b>    <div>    <br />    </div>    <div>    万维网是在HTTP协议的基础上开发的,它是一个应用层协议,使用TCP作为传输层(如果对分层概念混淆,参考     <a href="/misc/goto?guid=4958348485838322024" rel="nofollow" target="_blank">OSI参考模型</a>)。这意味着客户端的每个请求创建都要一个新的服务器连接。虽然它最初是可以帮助使问题简单些,但对于现在Web的需求它会导致一些问题。    </div>    <div>    <br />    </div>    <div>    SPDY的设计,就是为了解决HTTP协议中的这些缺点。它使用单一连接来处理所有客户端和服务器之间的请求/响应。    </div>    <div>    <br />    </div>    <div>    SPDY的核心是帧管理层(framing layer),它管理两个端点间的连接和数据的传输。 两个端点之间可以有多个数据流。 在帧管理层的顶部,SPDY实现了HTTP请求/响应处理。这使得我们不需要对现有网站做太大的更改或不更改就可以使用SPDY。    </div>    <div>    <br />    </div>    <div>    <b>使用SPDY有什么好处?</b>    </div>    <div>    <br />    </div>    <div>    因为少了为每个请求建立连接的开销,响应延迟会很低。    </div>    <div>    <br />    </div>    <div>    除了数据部分,SPDY也会压缩请求/响应头。对于手机和其他速度很慢甚至要珍惜每个字节的连接,这将是有用的。    </div>    <div>    <br />    </div>    <div>    SPDY被设计为使用SSL处理所有客户端和服务器间的通信,这意味着该网站会更加安全。    </div>    <div>    <br />    </div>    <div>    服务器可以使用SPDY推送数据到客户端,而不是等待客户端的请求,这可以帮助网站更有效的利用资源。    </div>    <div>    <br />    </div>    <div>    <b>已经投入生产环境了?</b>    </div>    <div>    <br />    </div>    <div>    很多Google的应用和     <a href="/misc/goto?guid=4958348486624903162" rel="nofollow" target="_blank">推ter</a>已经在使用SPDY,Amazon Silk浏览器     <a href="/misc/goto?guid=4958348487417139838" rel="nofollow" target="_blank">使用SPDY</a>代理。    </div>    <div>    <img style="width:544px;height:340px;" alt="为我们准备的SPDY" src="https://simg.open-open.com/show/809024273618402dbea2208e0e801f0a.png" width="600" height="375" />     <br />    </div>    <div>    访问下面的URL,查看哪些网站正在使用SPDY.     <pre class="brush:html; toolbar: true; auto-links: false;">chrome://net-internals/#spdy</pre>     <p></p>    </div>    <div>    <b>怎样给我的站点添加SPDY支持?</b>    </div>    <div>    <br />    </div>    <div>    添加SPDY支持的最简单方式是启用Apache的     <a href="/misc/goto?guid=4958348488219799557" rel="nofollow" target="_blank">mod_spdy</a>模块。mod_spdy通过钩子(hook)修改了Apache的默认请求/响应处理过程并添加了SPDY处理。    </div>    <div>    <br />    </div>    <div>    切换到SPDY带来的速度提升可能会随着网站现有配置而不同。如果你在使用像     <a href="/misc/goto?guid=4958348489011544104" rel="nofollow" target="_blank">wildcard asset hosts</a>(如:assets%d.example.com)之类的HTTP性能优化,那将会导致SPDY创建为同一个端点创建多个连接,因此会降低性能。一些浏览器如Chrome通过     <a href="/misc/goto?guid=4958348489820887646" rel="nofollow" target="_blank">连接池</a>巧妙的处理了这个问题。还有,一些CDN如Amazon Cloudfront仍然     <a href="/misc/goto?guid=4958348490611871993" rel="nofollow" target="_blank">不支持SPDY</a>,所以这些资源需要使用HTTP连接去加载。    </div>    <div>    <br />    </div>    <div>    你可以使用类似     <a href="/misc/goto?guid=4958348491407883630" rel="nofollow" target="_blank">Chromium Page Benchmarker</a>之类的工具来检测你的网站不同配置下在使用和不使用SPDY情况下的表现。    </div>    <div>    <img style="width:545px;height:342px;" alt="为我们准备的SPDY" src="https://simg.open-open.com/show/5c630b60f21e2420520e1017e0227c6a.png" width="600" height="377" />     <br />    </div>    <div>    <b>我需要一个SSL证书吗?</b>    </div>    <div>    <br />    </div>    <div>    在初始化连接时,mod_spdy使用SSL握手和Next Protocol Negotiation (NPN)来通知客户端服务器支持SPDY。此外,要在已存在的HTTP代理上工作,SPDY需要通过SSL隧道传输数据流,这意味着目前你需要一个有效的SSL证书来使你的网站支持SPDY。    </div>    <div>    <br />    </div>    <div>    然而,无SSL的情况下也是可以在本地测试SPDY的。所以,你可以使用参数--use-spdy=no-ssl运行Chrome,这样就可以连接一个支持SPDY服务器而不使用SSL了。    </div>    <div>    <br />    </div>    <div>    <b>SPDY可以帮助建立实时性Web应用程序吗?</b>    </div>    <div>    <br />    </div>    <div>    值得注意的是,SPDY并没有为使用     <a href="/misc/goto?guid=4958348492202997634" rel="nofollow" target="_blank">WebSockets</a>提供任何特别的好处。因此,从更高级别上看它们可能很像,都是完全独立的协议。它们的创建是为了不同的目的,甚至它们两个的内部帧算法都是不一样的。    </div>    <div>    <br />    </div>    <div>    另一方面,SPDY固有的异步流(     <span style="text-align:justify;line-height:25px;font-family:Cambria, Georgia, Times, 'Times New Roman';color:#282828;font-size:16px;">asynchronous streams</span>)将会帮助实现如     <a href="/misc/goto?guid=4958348492999969335" rel="nofollow" target="_blank">服务器发送事件</a>(Server-Sent Event)之类的功能。    </div>    <div>    <br />    </div>    <div>    <b>SPDY不是终极武器!</b>    </div>    <div>    <br />    </div>    <div>    SPDY将会持续改进成为一个更加稳定的协议,并且以后会使HTTP协议更加成功。考虑到成本,除非你在运行一个负载较高的网站,否则添加SPDY支持不会有立竿见影的效果的。    </div>    <div>    <br />    </div>    <div>    所以,最好先考虑     <a href="/misc/goto?guid=4958348493791518211" rel="nofollow" target="_blank">一般的页面优化技术</a>然后再考虑SPDY,如果你想去掉那些额外的延迟。    </div>    <div>    <br />    </div>    <div>    <b>进一步阅读:</b>    </div>    <br />    <div>     <div>     <a href="/misc/goto?guid=4958348494601161950" rel="nofollow" target="_blank">SPDY White paper</a>     </div>     <div>     <a href="/misc/goto?guid=4958348495401028154" rel="nofollow" target="_blank">SPDY Protocol Spec (draft 3)</a>     </div>     <div>     <a href="/misc/goto?guid=4958326422454141972" rel="nofollow" target="_blank">Life beyond HTTP 1.1: Google's SPDY by Ilya Grigorik</a>     </div>     <p><a href="/misc/goto?guid=4958348496925220697" rel="nofollow" target="_blank">SPDY: It's Here! by Roberto Peon (Google I/O talk)</a></p>     <p><a href="/misc/goto?guid=4958348497719707015" rel="nofollow"></a><a href="/misc/goto?guid=4958348498512464700" rel="nofollow" target="_blank">原文链接</a></p>    </div>