SPDY与保持活动连接的http多路复用有什么不同

cod*_*bly 15 firefox http keep-alive spdy

HTTP 1.1支持保持活动连接,在发送"Connection:close"之前,连接不会关闭.

那么,如果是浏览器,在这种情况下firefox启用了network.http.pipelining并且network.http.pipelining.maxrequests增加了不一样的效果到底是什么?

我知道这些设置被禁用,因为对于某些网站,这可能会增加负载,但我认为一个简单的http标头标志可以告诉浏览器可以使用多路复用,这个问题可以更容易解决.

改变浏览器中的默认设置比发明一种增加复杂性的新协议(尤其是在http服务器中)更容易?

Tor*_*rne 22

SPDY具有许多超出HTTP流水线可提供的优势,这些优点在SPDY白皮书中有所描述:

  1. 使用流水线技术,服务器仍然必须按照请求的顺序一次返回一个响应.如果客户端请求在静态资源之前动态生成的资源,则可能会出现问题:服务器无法发送任何"简单"静态响应,直到生成并发送了动态生成的静态响应.使用SPDY,响应可以在生成时无序或并行返回,从而减少了接收所有资源的总时间.
  2. 正如您在问题中所提到的,并非所有服务器都能够处理流水线操作:它不仅仅是加载,当客户端请求流水线操作时,某些服务器实际上表现不正确.使用标题表示可以进行流水线操作为时已晚,无法获得最大的好处:您已经收到了第一个响应,所以虽然您可以在将来的连接中使用它,但对于这个来说已经太晚了.
  3. SPDY使用特定于该任务的算法压缩标头(有状态并且知道HTTP标头中通常的内容); 虽然是,但SSL已经包含了压缩,只是使用deflate压缩它们效率不高.大多数HTTP请求没有正文,只有一个简短的GET行,因此标题实际上构成了整个请求:您可以获得的任何压缩都是一种改进.与标题相比,许多响应也很小.
  4. SPDY允许服务器在没有客户端要求的情况下发回其他响应.例如,在客户端有机会接收并解析HTML以确定样式表URL之前,服务器可能会开始发送页面的CSS以及原始HTML.这可以通过在请求呈现页面所需的其他资源之前消除客户端实际解析HTML的需要来进一步加速页面加载.它还支持带宽较少的此功能版本,它可以"暗示"可能需要哪些资源,并允许客户端决定:例如,这允许不关心图像的客户端不打扰请求他们,但想要显示图像的客户仍然可以使用给定的URL请求图像,而无需等待HTML.
  5. 其他事情:请参阅William Chan的答案.


小智 12

  • HTTP流水线在HTTP事务级别容易受到行头阻塞(http://en.wikipedia.org/wiki/Head-of-line_blocking)的影响,而SPDY由于其使用仅在传输级别具有行头阻塞多路复用.
  • HTTP流水线具有可部署性问题.请参阅http://tools.ietf.org/html/draft-nottingham-http-pipeline-01,其中介绍了许多不同的解决方法和启发式方法,以缓解这种情况.在野外部署的SPDY没有这个问题,因为它通常使用NPN(http://technotes.googlecode.com/git/nextprotoneg.html)通过SSL(端口443)部署来协商SPDY支持.SSL是关键,因为它可以防止中间人干扰.
  • SPDY具有标头压缩.请参阅http://dev.chromium.org/spdy/spdy-whitepaper,其中讨论了标头压缩优势的一些基准测试结果.现在,有用的是要注意带宽越来越小(参见http://www.belshe.com/2010/05/24/more-bandwidth-doesnt-matter-much/),但它也有用请记住,带宽仍然是移动设备的关键.查看https://developers.google.com/speed/articles/spdy-for-mobile,其中显示了SPDY对移动设备的优势.
  • SPDY支持服务器推送等功能.有关使用服务器推送来提高内容的可缓存性并仍然减少往返的方法,请参见http://dev.chromium.org/spdy/spdy-best-practices.
  • HTTP流水线具有错误定义的故障语义.当服务器关闭连接时,您如何知道哪些请求已成功处理?这是POST和其他非幂等请求不允许通过流水线连接的主要原因.SPDY提供语义以取消同一连接上的各个流,并且还具有GOAWAY帧,该帧指示要成功处理的最后一个流.
  • HTTP流水线操作很难,通常是由于中介,允许深层管道.这(除了许多其他原因,如HoL阻塞)意味着您仍然需要利用多个TCP连接来实现最大并行化.使用多个TCP连接意味着无法共享拥塞控制信息,无法共享压缩上下文(如SPDY与标头一样),对于互联网来说更糟糕(对于中介和服务器而言更加昂贵).

我可以继续谈论HTTP流水线与SPDY.但我建议你阅读SPDY.查看http://dev.chromium.org/spdy和我们关于SPDY的技术讲座,网址http://www.youtube.com/watch?v=TNBkxA313kk&list=PLE0E03DF19D90B5F4&index=2&feature=plpp_video.