SPDY 为 Firefox 11 带来了响应式和可扩展的传输

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 平台网络首席工程师

更多 Patrick McManus 的文章…


37 条评论

  1. Pikadude No. 1

    我有点失望,因为这显然只对那些能够负担/使用 SSL 证书的作者可用。

    2012 年 2 月 3 日 19:13

    1. nototoad

      任何人都能负担得起 SSL 证书,它们是免费的。Web 不应该因为有些人不想获取廉价或免费的证书而受到阻碍。

      2012 年 2 月 3 日 22:42

  2. Dan

    SSL 和 NPN 要求几乎肯定会阻止广泛采用。

    2012 年 2 月 3 日 19:48

    1. Patrick McManus

      NPN 不会成为问题。它已经是 openssl 和 nss 开发分支的一部分。apache 的 mod_spdy 构建并很好地与 openssl 结合使用。node-spdy 也一样。

      最大的风险可能是需要升级的硬件固件。但它们无论如何都在进行广泛的升级以解决 BEAST 相关问题。希望它们能将错误启动、NPN、SNI 等更新也包含在内。

      2012 年 2 月 4 日 08:30

  3. Adam

    Pikadude - 你知道你可以获得免费的 SSL 证书,对吧? - http://www.startssl.com/

    2012 年 2 月 3 日 21:48

    1. Techy Mike

      SSL 不是必需的(但建议使用)。

      我本人在非生产环境中使用 StartSSL,但对于想要其他选择的人来说…

      自签名证书… - 除非手动添加证书,否则永远不会在用户浏览器中被信任。

      http://www.cacert.org/ - 并非所有浏览器都信任它。

      http://www.comodo.com/e-commerce/ssl-certificates/free-ssl-cert.php - 免费 90 天证书。
      http://www.verisign.co.uk/ssl/free-30day-trial/index.html - 30 天免费。
      http://www.freessl.com/ - 30 天免费。
      http://www.ssl247.co.uk/ssl-certificates/brands/rapidssl/rapidssl-trial

      免费 SSL 并非不可能,这一点应该很清楚... 而且说真的,如果您的网站确实需要 SSL(对于 SPDY 来说,这并不完全准确),那么有很多廉价的选择。

      2012 年 2 月 4 日 02:00

      1. Patrick McManus

        Firefox SPDY 始终需要 SSL。

        我听到的关于这方面最好的说法是,SSL 对于服务器运营商来说可能是后勤负担[*], 但我从未遇到过希望运行不安全协议的浏览器用户。

        [*]我们需要改进 CA/PKI 情况。我怀疑对此也不会有人反对。

        2012 年 2 月 4 日 08:27

  4. driax

    @Pikadude

    只需使用 startssl.com。他们提供免费的 SSL 证书。不过,如果您需要子域名或星号域名(*.example.com),则需要付费。

    2012 年 2 月 3 日 22:52

  5. Mook

    代码是否已完全审查?最初包含 SPDY 更改的错误包含仅涵盖未启用 SPDY 部分的审查,而不是 SPDY 特定的代码路径。鉴于这些补丁已经过去一段时间了,事实上,甚至初始上线也已经过去一段时间了,它可能在其他地方完成,并且一切都很好,当然 - 只是该错误有点复杂,不清楚所有代码是否都已正确审查。

    2012 年 2 月 4 日 00:07

    1. Patrick McManus

      是的,代码审查作为 FF12 的一部分提交,任何关键部分都移植到了 FF11。预计至少在 FF 13 nightly 中进行一次默认启用的试运行。

      2012 年 2 月 4 日 08:24

  6. cuz84d

    嘿,Patrick,我相信常规网络代码中存在一个错误,该错误会导致浏览器崩溃,或者可能将其置于脱机模式或出现一些奇怪的情况。

    偶尔我们会看到浏览器在一分钟内从正常工作状态变为锁定并停止响应网络请求,这种情况发生在 Firefox 4-9 上,我们最终不得不清除缓存和历史记录并重新启动浏览器才能使其恢复工作。你知道是什么导致这种情况吗?它根本无法重现。我想知道浏览器是否自行进入脱机模式... 或者网络是否弄乱了磁盘缓存。

    无论如何,我当然希望 SPDY 能解决这个问题... 我已经启用了它,我可以说它在下载页面方面非常快。

    2012 年 2 月 4 日 01:11

  7. Jo Hermans

    是否有类似于 Chrome 的扩展程序?这将更容易调试 SPDY 网络连接。

    2012 年 2 月 4 日 14:01

    1. Jo Hermans

      抱歉,我在上面的帖子中提到了 chrome://net-internals/#spdy,但它被删除了,因为我使用了角括号。

      2012 年 2 月 5 日 10:54

  8. Dmitry Pashkevich

    我敢打赌,在即将发布的 FF 版本中实现 SPDY 是 Google 和 Mozilla 续约条款之一 :)

    2012 年 2 月 5 日 05:09

    1. louisremi

      我敢打赌你错了:SPDY 对 Web 及其用户有利,Mozilla 为什么需要被迫采用它?

      2012 年 2 月 5 日 10:18

    2. RyanVM

      是的,除了去年 8 月开始着手这件事的那一部分…

      2012 年 2 月 5 日 17:32

  9. Matt Wilcox

    这是个好消息:D

    Mozilla 是否考虑过 SPDY 现在使得向服务器发送有用的标头以指示设备功能变得更加现实?由于压缩和多路复用,执行此操作的开销远低于 HTTP,这将非常有用。

    我同意标头仍然“昂贵”。但与由于成功协商内容而节省的数百千字节带宽相比,它们是否昂贵?

    目前,我们无法在没有*可靠的*客户端功能集报告的情况下进行*可靠的*服务器适配。我们现在无论如何都无法获得它,并且已经尝试了许多方法 - JS、cookie 和 UA 检测。没有一个是万无一失的,所有这些都只是试图*猜测*浏览器标头可以明确告诉我们的内容。这就是为什么需要标头的原因。

    为了消除任何“浪费”,我希望能看到浏览器表现得像这样:与现在完全一样,但监听服务器响应头,该响应头反过来请求浏览器在所有对该域名的请求中附加某些头。例如,

    1) 客户端请求 spdy://website.com
    2) 服务器响应内容并添加“请求[带宽] & [设备屏幕尺寸] 头”
    3) 客户端随后将这些头附加到该域名上所有未来的请求。
    4) 服务器可以将来自 2) 的任何修改后的内容通过 SPDY 推送,而无需另一次请求(因为 SPDY 可以)。

    这样,在一般浏览中就不会有额外的开销,除非服务器专门请求了这些开销。并且使用 SPDY,它们无论如何都会被压缩。

    最后,服务器可以获得可靠的功能检测?

    2012年2月6日 09:38

  10. Anunturi

    这是个好消息。我厌倦了使用雪碧图并将图片分散到多个主机上,仅仅是为了获得一点速度提升。
    可惜这依赖于 SSL 证书。无论如何,这在未来应该成为默认设置,而且公司应该采纳 StartSSL 的倡议,提供免费的有限 SSL 证书。
    我猜想,那些能够负担得起自己私有 IP 地址的网站和那些与数百个其他网站一起托管的网站之间,差距会更大。

    尽管如此,未来看起来一片光明,由于这种新的协议,向 IPv6 的过渡将会加速。

    2012年2月7日 23:38

  11. Major

    在我看来,SPDY 是一种危险的炒作,其优于 HTTP1 的优势比公布的要少。

    我认为“服务器推送”可能是 SPDY 发明者 Google 的一个不错的广告功能,但它确实是一个危险的漏洞,因为理论上,一个不良的服务器可以将任何不良内容或未经请求的广告推送给浏览器,而无需使用客户端脚本。

    第二个缺点是,没有 CPU 节省,因为服务器和客户端需要解密和解压缩,并且客户端的 CPU 使用量在移动设备中可能是一个真正的问题。

    第三个问题是 SSL 证书。小型主机提供商不会,在某些情况下甚至无法安装 SSL 证书,主要是因为主机提供商担心在共享环境中 SSL 加密带来的额外 CPU 使用量。

    我的建议是使用 SPDY:// 而不是 http://。用户可以通过选择协议来选择自己的优势。

    2012年2月9日 02:57

    1. Patrick McManus

      @major – 感谢你的评论。

      关于服务器推送 – Firefox 尚未接受服务器推送 – 我们正在等待 spdy/3(或更高版本)中的流量控制机制定义完毕后再使用它。部分原因是为了你描述的这些担忧。

      关于 CPU – 加密是绝对必要的。我们不会再犯同样的错误了。并且 SPDY 比通过 SSL 的 HTTP/1 更省 CPU,因为它终止了更少的连接(连接终止的 RSA 操作是 SSL 的主要成本 – 而不是流上的批量密码)。

      至于压缩,它以一种非常有针对性的方式使用,并且使用非常小的窗口(这对 RAM 和 CPU 都有影响)——对此进行了大量的思考。你的整个流不会仅仅通过 gzip 传输。它的价值非凡。

      关于小型主机提供商:我们需要在运行 PKI 方面做得更好。但是重点应该放在确保用户首先运行安全的协议上。用户优先。

      2012年2月9日 06:40

  12. Pikadude No. 1

    @所有回复我的用户:你们只解决了一半的问题;如果 你的主机尚未允许 SSL 证书,那么免费的 SSL 证书对你没有任何帮助。尽管我想,这也有积极的一面,那就是这只是一个时间问题。

    2012年2月9日 17:05

  13. Gautam Dewan

    Patrick:我有一个与上面 Jo Hermans 类似的问题。

    我正在我的 Web 服务器上尝试 Firefox 11,该服务器实现了 spdy/2。Chrome 和 spdycat 客户端运行良好。Firefox 11 则不行。Firefox 11 中是否有某些内容或某个附加组件可以显示活动的 SPDY 会话以及到 Web 服务器和来自 Web 服务器的帧流?

    在我看来,Firefox 无法解释从 Web 服务器返回的 SYN_RESPONSE 帧。Firefox 中的 Web 开发人员控制台将 URL 列为状态未知。

    2012年2月13日 21:45

  14. Patrick McManus

    https://groups.google.com/forum/#!topic/mozilla.dev.platform/5dtG0hKRg5U 中有一些信息可能对您有所帮助——一个响应头和大量 HTTP 日志信息。

    我很乐意通过电子邮件 (mcmanus at ducksong dot com) 与您一起处理您的服务器互操作性问题。

    HTTP 日志将是收集的第一批信息。

    2012年2月14日 07:05

  15. Gautam Dewan

    感谢 Patrick 帮助我解决所有问题。
    Firefox 11 上的 SPDY 运行良好!
    我将在未来几周内进行更多测试。

    此致,
    Gautam。

    2012年2月16日 20:50

  16. GrammarNazi

    我忍不住注意到这一点:“SPDY 的少量繁忙连接更符合互联网的拥塞控制模型……”——动词“fit”与主语“number”不匹配。它应该是“SPDY 的少量繁忙连接符合拥塞控制模型……”(其中“fit”被共轭成第三人称单数“fits”以匹配“number”)。

    除了这个吹毛求疵的东西之外,这篇文章真的很好——在阅读它之前,我几乎不明白 SPDY 是什么。

    2012年2月28日 21:09

    1. Robert Nyman [Mozilla]

      已更改。感谢你的意见!

      2012年2月29日 00:17

  17. Christian Eaton

    +1 支持添加设备功能头。

    我可以想象一个用例,其中小型设备在初始页面加载时从服务器接收较低分辨率的图像,因为其屏幕较小和/或带宽能力有限,然后在用户放大或点击它时请求同一图像的较大版本(取决于浏览器)——在渐进式图像格式的情况下,可能只下载“额外”的图像数据。

    随着未来几年“移动设备”与平板电脑/上网本之间的界限进一步模糊,我们不能仅根据屏幕尺寸(如 CSS 媒体查询)来假设用户的需求:我可能正在使用我的全功能笔记本电脑通过每兆比特的 GPRS 连接,或者在连接到 HDMI 屏幕的手机上通过快速的 WiFi 连接工作。我们需要能够允许用户(通过浏览器)配置他们希望接收内容的方式(浏览器会提供一些明智的猜测,用户可以覆盖这些猜测)。

    2012年3月5日 06:48

  18. fracjackmac

    优秀的博文和后续评论。

    谢谢!!

    fmj

    2012年3月11日 10:56

  19. Bill Fu

    “SPDY 最重要的目标是使用更少的 TCP 连接来传输 Web 内容。它通过将大量事务多路复用到一个 TLS 连接上来实现这一点。这比原生 HTTP/1 具有更好的延迟特性。”
    据我所知,HTTP1.1 定义了持久连接(参见 RFC 2616),以便可以在一个承载连接(通常是 TCP 连接)上对多个请求/响应进行流水线处理。我认为这仅仅是相对于 HTTP1.0 的优势?

    2012年6月6日 00:56

    1. Patrick McManus

      流水线比没有好,但它们不是像 SPDY 那样的完整多路复用。它们存在严重的头部阻塞问题,没有优先级,错误处理很糟糕,而且由于基础设施(包括安全软件)出现故障,因此无法有效地部署到许多环境中。SPDY 不会遇到任何这些问题。

      通过大量缓解措施,流水线可以为传统服务器提供性能提升,但 SPDY 是一种更好的前进方向,因为它与内容无关,可以作为直接替换。

      2012年6月6日 05:57

  20. Bill Fu

    同意。在阅读 IETF 的 SPDY 草案 (http://tools.ietf.org/html/draft-mbelshe-httpbis-spdy-00#section-2.2) 之后,我对其与 HTTP1.1 的区别有了更清晰的了解。很有趣,它看起来非常像另一个应用层 TCP(并且在 TCP 之上)!
    从草案来看,优先级机制应用于流。因此,我想知道当浏览器打开一个网页时,该网页可能包含数十个 HTTP GET 请求(用于 main.html、图标、图片等),将使用多少个流?我猜想应该少于 8 个。关于如何在实践中利用此功能,没有太多提示。另一个担忧是,如果流 ID 总是单调递增,则可能存在流 ID 耗尽的风险?

    2012年6月27日 19:38

  21. Patrick McManus

    嗨,Bill,理想情况下,整个页面及其所有子资源都通过同一个 SPDY 连接移动。因此,这是一个具有数十个并行流的 TCP 连接。这些流具有优先级,因此 html/css/js 获得带宽优先级,高于图像,但所有请求都并行发送以避免任何 RTT 命中。

    至于流 ID 耗尽,实际上有 30 位流 ID(10 亿),因此耗尽并不是什么大问题……当它发生时,你只需建立一个新的连接。我从未见过这种情况发生过 :)

    2012年6月27日 20:20

  22. Bill Fu

    Patrick,是的,建立一个新的连接绝对是一个好主意 :)
    对于使用浏览器的普通用户来说,我认为很难耗尽 ID,但如果它用于服务器之间(例如,浏览网关和 Web 服务器),我担心这种情况可能会发生。

    2012年6月27日 22:02

  23. Sriram

    这为中间透明缓存带来了巨大的挑战,这些缓存大多由移动运营商和 ISP 部署。这些透明缓存在加速页面下载和为运营商节省互联网带宽方面发挥着更重要的作用。

    我担心,如果 SPDY 对此类问题视而不见。因为,一旦 Web 即使对于不需要安全保护的内容也变得安全,我们就将这些透明缓存变得毫无用处,这将导致运营商和用户都遭受巨大损失。

    对于 Google 来说,这可能并不重要,因为他们在处理这些本地缓存或 CDN 时有不同的策略。

    2012年7月18日 08:05

  24. Kevin L.

    对于那些表示他们担心 SSL 要求,因为某些主机(或其主机)不支持 SSL 的人:如果主机在当今时代不允许你安装或使用 SSL,那么你需要更换主机。

    2012年8月4日 18:26

  25. John Hosfield

    为什么我的图片在我已经为 Firefox 首页选择了一张图片后会自动重置?

    2012年9月7日 16:23

  26. John Hosfield

    为什么我的首页图片在我设置了所需的首页图片后会自动重置?

    2012年9月7日 16:25

本文的评论已关闭。