Firefox 11 包含了第一个 Firefox 对 SPDY 协议的实现。SPDY 是一种安全的 Web 传输协议,它封装了 HTTP/1,同时替换了其老化的连接管理策略。这使得当今网页加载更加响应迅速,并为未来的实时 Web 提供了更好的可扩展性。
SPDY 最重要的目标是使用更少的 TCP 连接传输 Web 内容。它通过将大量事务多路复用到一个 TLS 连接来实现这一点。这比原生 HTTP/1 具有更好的延迟特性。使用 SPDY 时,Web 请求实际上永远不会因为连接限制耗尽(例如,对同一主机名的 6 个并行 HTTP/1 连接的限制)而导致在浏览器中等待。该请求只需多路复用到现有的连接上。
许多网页都充满了小型图标和脚本引用。这些传输的速度受网络延迟而不是带宽的限制。SPDY 加速了并行处理,从而消除了 HTTP/1 遇到的串行延迟,最终结果是更快的页面加载时间。通过使用更少的连接,SPDY 还可以节省建立这些连接所需的时间和 CPU 资源。
下面的页面加载瀑布图很好地说明了这一点。请注意,大量对象请求同时访问网络。它们各自的加载时间完全由网络延迟组成,通过并行执行它们,总页面加载时间减少到一个往返行程。
一般来说,在高延迟连接上具有大量嵌入对象的网页将从 SPDY 中获得最大的收益。这很好,因为这是 Web 发展方向。高延迟移动网络每天都在成为互联网的更大一部分,并且随着互联网传播到尚未普及的地区,您可以肯定的是,增长将由移动网络驱动。具有大量对象的网页设计也证明是一种非常流行的范式。Facebook、G+、Twitter 和任何头像驱动的论坛都是明显的例子。与其依赖难以开发和维护的精灵图和数据 URL 等优化技巧,不如让传输协议更好地发挥作用。
除了更快的页面加载时间外,还有充分的理由认为这种方法对 Web 的基础架构有益。HTTP/1 使用大量小型且并行的活动连接的方式造成了巨大的网络拥塞问题。这阻碍了 WebRTC、VOIP 和一些高度交互式游戏等实时应用程序的部署。SPDY 的少量繁忙连接更符合互联网的拥塞控制模型,并使经典 Web 内容的传输能够更好地与这些实时应用程序协作。Web 浏览器仅通过对 HTTP/1 的并行度进行任意限制来设法控制拥塞问题。使用 SPDY,我们也可以在低延迟条件下同时拥有并行处理和快速加载。这是我认为 SPDY 最有前景的特性,并且我过去曾对此进行过广泛的讨论。
向 SPDY 过渡的路径非常顺畅。它是一个新协议,但在 URI 中使用旧的 https:// 协议方案。使用 SPDY 不需要更改标记。通常,SPDY 服务器同时支持 SPDY 和 HTTP/1,以便与不支持 SPDY 的浏览器一起使用。使用的协议通过称为“下一协议协商”的 TLS 扩展进行静默协商。好消息是,升级到 SPDY 只需进行服务器管理升级即可。无需更改内容,并且 REST API 等功能将继续正常工作。实际上,SPDY 站点在视觉上与 HTTP/1 站点没有任何区别。
Google 在启动这项技术并将其公开发展方面做了大量工作,但它不再是 Google 独有的项目。自从 Chrome 和各种 Google Web 服务中引入了这些实现以来,我们已经看到许多其他产品和团队(包括亚马逊的平板电脑、node.js、Apache 模块、curl、nginx,甚至一些 CDN 以及 Mozilla)提供了 SPDY 的代码或承诺。在我看来,这种反应是因为工程师们研究了这个问题,并认为它解决了 HTTP 连接处理的一些严重问题,并且这是一项非常适合我们所有人合作的技术。W3C TAG 和 IETF 等所有相关的标准化论坛中也正在进行讨论和初步的行动。协议的开放标准化是 Mozilla 感兴趣的关键条件,但它不是使用它的先决条件。收集操作经验,而不仅仅是在白板上进行工程设计,是制定最佳协议的宝贵部分。可以根据该经验和标准化过程来迭代 SPDY 的细节。在这个阶段,该协议非常适合这种演变。
需要在 Firefox 11 中通过 about:config 显式启用 SPDY。访问该 URL 并搜索 network.http.spdy.enabled,将其设置为 true。未来的版本希望将其默认启用。
关于 Patrick McManus
Mozilla 平台网络首席工程师
37 条评论