当支持SPDY的浏览器收到HTTP2(H2)响应时,会发生什么?

awd*_*son 3 browser https cdn spdy http2

我的直觉是具有SPDY功能的浏览器会将其视为SPDY响应。但是,我能找到的最大保证是,H2响应将正常降级为HTTP1.1。我正在考虑以面向H2的方式(多个请求,没有域分片等)来提供资产,但是我确实需要支持某些非H2浏览器(例如Android 4.1的浏览器)。如果所有客户端都至少符合SPDY,我可以吗?

额外的问题:混合方案是否涉及任何并发症?我们正在使用不支持H2的Web框架,但是我正在考虑通过CDN提供大部分资产。假设使用TLS。

sbo*_*det 5

启用S​​PDY或HTTP / 2的浏览器使用TLS扩展名(较旧的NPN或新的ALPN)来协商它们通过TLS进行的协议。

客户端按照优先顺序(例如h2,spdy/3.1,http/1.1)发送它能够说的协议列表,服务器从列表中选择一个它也支持(并且符合安全性要求的约束)的协议。

例如,如果您有一个不支持的较旧的浏览器,h2它将发送spdy/3.1,http/1.1,并且服务器将永远不会选择h2(即使它支持)。如果服务器不支持SPDY,则剩下的唯一选项是http/1.1,这就是HTTP / 1.1的“正常降级”。

除非服务器上出现严重的实现错误,否则如果客户端请求说出SPDY(而不是HTTP / 2),则服务器将永远不会以HTTP / 2进行回复。

SPDY正在逐步淘汰,以支持HTTP / 2。例如,最新的Chrome版本不再支持SPDY

当您向不同的域发出请求时,没有任何麻烦,并且服务器使用不同的协议:浏览器可以透明地处理该协议。

如果服务器可以说SPDY和HTTP / 1.1,而CDN可以说HTTP / 2和HTTP / 1.1,则必须使用支持所有3种协议的浏览器来利用SPDY和HTTP / 2的好处。浏览器可以与您的服务器协商SPDY,并与CDN协商HTTP / 2,以及由两个来源的资源组成的页面。

但是,浏览器将很快删除(或已经删除)SPDY,因此在最近的浏览器中,您可能最终会在服务器上使用HTTP / 1.1,而在CDN上使用HTTP / 2,从而失去了SPDY | HTTP / 2的资源优势。服务器。