当浏览器不支持 http2 时回退到 http1.1

Posted

技术标签:

【中文标题】当浏览器不支持 http2 时回退到 http1.1【英文标题】:Fallback to http1.1 when browser doesn't support http2 【发布时间】:2016-06-22 10:48:59 【问题描述】:

我正在学习 HTTP2 并使用码头开发了一个 POC,它在 chrome 中运行良好。

但是,当我在 Firefox 中点击相同的 URL 时,HTTP2 URL 请求得到空白页面,并出现异常提示“您尝试查看的页面无法显示,因为无法验证接收到的数据的真实性。” 搜索后发现在Firefox中我必须从“about:config”启用network.http.spdy.enabled.http2。

我的问题是,如果浏览器不支持 HTTP2,服务器或浏览器端是否有任何机制可以回退到 HTTP1。

【问题讨论】:

【参考方案1】:

如果客户端不支持 HTTP/2,Jetty 确实支持回退到 HTTP/1.1。

不看服务器端代码,我猜你在配置ServerConnector 时没有将HttpConnectionFactory 添加为工厂之一,因此你不会得到回退。

另外,请记住,回退是从基于 TLS 的 HTTP/2 到基于 TLS 的 HTTP/1.1;换句话说,您在“https”领域,无论您使用的是 HTTP/2 还是 HTTP/1.1,您都将留在那里。 因此,您需要有一个适当的证书才能发生回退:您不能从加密的 HTTP/2 转到明文的 HTTP/1.1。

This example 向您展示了如何正确设置一个正常工作的 HTTP/2 服务器并回退到 HTTP/1.1。

【讨论】:

以上是关于当浏览器不支持 http2 时回退到 http1.1的主要内容,如果未能解决你的问题,请参考以下文章

nginx:proxy_pass失败时回退到try_files需要不寻常的配置

如何强制客户端使用 http/2? (而不是回退到 http 1.1)

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

http2和http1.1的性能差异对比

Three.js 检测 webgl 支持并回退到常规画布

如何禁止浏览器中点回退按钮能回退到上一页?