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

3
我的直觉是,支持SPDY的浏览器将把它视为支持SPDY响应。但是,我能找到的最多只是一个保证,即H2响应将向后兼容到HTTP1.1。 我正在考虑以H2为导向的方式提供资产(多个请求,无域分片等),但我确实需要支持一些非H2浏览器(例如Android 4.1的浏览器)。 如果所有客户端至少都符合SPDY标准,那么我会没问题吗?
奖励问题:混合协议有什么复杂性?我们所使用的Web框架不支持H2,但我正在考虑从CDN中提供大部分资产。 假设TLS。
1个回答

5
支持 SPDY 或 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优势。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接