为啥 Google.com 切换到 SPDY (HTTP/2+QUIC/35) 而不是 HTTP/2

Posted

技术标签:

【中文标题】为啥 Google.com 切换到 SPDY (HTTP/2+QUIC/35) 而不是 HTTP/2【英文标题】:Why did Google.com switch to SPDY (HTTP/2+QUIC/35) instead of HTTP/2为什么 Google.com 切换到 SPDY (HTTP/2+QUIC/35) 而不是 HTTP/2 【发布时间】:2017-07-27 03:15:43 【问题描述】:

几天前我看到 Google.com 使用 HTTP/2,但昨天我发现 Google.com 已切换到 SPDY (HTTP/2+QUIC/35)。

两个问题:

    如您所知,HTTP/2 扩展了 SPDY,为什么 Google.com 会回滚到 SPDY? SPDY 和 SPDY (HTTP/2+QUIC/35) 有什么区别?

【问题讨论】:

【参考方案1】:

http/2+quic/35不是Speedy,它是一种新的通信协议,基于UDP而不是TCP,命名为QUIC。

让我们引用https://www.chromium.org/quic:

QUIC 相对于 TCP+TLS+HTTP2 的主要优势包括:

连接建立延迟 改进的拥塞控制 多路复用,没有行头阻塞 前向纠错 连接迁移

一个很好的演示is available in this blog article。

事实上,整个 QUIC 项目被用来绕过 TCP 标准,以一种更被动的方式。多年来,Google 一直在 QUIC 上进行试验,在数十亿用户的 Chrome 浏览器中透明地进行试验,并且现在默认切换到它,如果它工作的话(回退到 TCP 上的“经典”HTTP/2)。

从开发者的角度来看,QUIC 有一个 HTTP/2 接口,具有它的所有功能。

据我所知,只有 LiteSpeed 支持 Google 之外的 QUIC - 还不是 OpenLiteSpeed 版本(遗憾的是) - 和 go-based Caddy server。

【讨论】:

我认为 Opera 支持它,但您可能必须启用它。 谢谢,我现在知道了,所以 google、google photos、youtube 等,现在几乎所有的 Google 产品都使用了 quic 协议。【参考方案2】:

你确定他们做到了吗?或者您用来显示此信息的工具 (this extension perhaps?) 是否选择这样显示?在 Chrome 的开发者工具中显示“网络”标签,看看 Chrome 真正认为它在说什么。

HTTP/2 是 SPDY 的标准版本,所以说“启用 SPDY (HTTP/2)”是没有意义的。除非这意味着它可以与 SPDY(“启用 SPDY”)通信,但在这种情况下选择与 HTTP/2 通信更好?

最后,QUIC 是 Google 正在试验的一种新协议,它取代了构建 SPDY 和 HTTP/2 的 TCP 网络层。所以两者都可以使用 QUIC 而不是 TCP,而且它通常比 TCP 更快(因此这个名字听起来像“quick”,是“Quick UDP Internet Connections”的首字母缩写)

【讨论】:

我也注意到了。网络选项卡显示“http/2+quic/35”。没有提到spdy。看起来他们在 QUIC 上使用 http/2。

以上是关于为啥 Google.com 切换到 SPDY (HTTP/2+QUIC/35) 而不是 HTTP/2的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OkHttp 连接 SPDY 网站?

将 spdy 与 mod_php 一起使用

为啥这个 SPDY SYN_STREAM 样本的标头显然未压缩?

为啥我必须在 AWS Application Load Balancer 中禁用 HTTP/2 以防止出现 ERR_SPDY_PROTOCOL_ERROR?

使用开箱即用的 SPDY 运行 Jetty

为啥 google.com 不加载到 iFrame [重复]