为不支持 HTTP2 的用户提供 HTTP 版本的站点

Posted

技术标签:

【中文标题】为不支持 HTTP2 的用户提供 HTTP 版本的站点【英文标题】:Serving HTTP version of site to those who don't support HTTP2 【发布时间】:2015-08-19 00:26:44 【问题描述】:

我想将我客户的网站完全移动到 HTTPS 以允许 HTTP2 工作,但是我想知道是否可以(在搜索引擎的眼中)服务旧流量(其中有很多和否则会遭受性能打击)不支持 HTTP2?

从 SEO 的角度来看这样做有危险吗?

您可以使用 WURFL 等工具进行检测吗?

我希望保持最新状态并为使用较新浏览器的用户提供改进的性能/安全性,但不希望发展中国家使用较旧浏览器的用户受到影响。

【问题讨论】:

【参考方案1】:

您不需要根据您使用的是 HTTP/2 还是 HTTP/1.1 来提供不同的内容,因为您的问题标题可能会暗示(如果我误解了,请见谅)。

另外,仅仅因为您更新到 HTTP/2,并不意味着您的服务器不能再提供 HTTP/1.1。

您可以轻松更新到 HTTP/2,并为不支持或不允许 HTTP/2 流量的旧设备或网络保留 HTTP/1.1 支持。

客户端和服务器是否可以说 HTTP/2 是协商的:只有当服务器检测到客户端支持它时才会使用它,否则服务器将回退到 HTTP/1.1 .因此,您不必冒险让您的网站在发展中国家的旧版浏览器中不可用。

再说一次,HTTP/2 实现可能会有所不同,但通常它们必须为不使用 HTTP/2 的客户端做好准备,并为这些客户端使用 HTTP/1.1(否则它们将无法提供内容并且会显示服务已关闭)。

【讨论】:

感谢您的回复 sbordet ,但我认为您没有抓住重点。该站点目前使用 HTTP 主要是因为在 HTTP 上提供服务比 HTTPS 快很多,尽管安全性较低。实现中的 HTTP2 需要 HTTPS。内容还是一样的,只是协议不同而已。然而,据我所知,对于支持它的用户来说,HTTP2 将比我们当前的 HTTP 设置更快。 @alexrogins 您可以有两个连接器,一个是明文,一个是 SSL。使用 Jetty,两者都可以使用 HTTP/1.1 或 HTTP/2 。然后问题就变成了如何/何时将客户端从纯文本连接器重定向到 SSL 连接器(因为大多数浏览器不会通过纯文本使用 HTTP/2)【参考方案2】:

值得一提的是,几周前我做了一些测试,我得到的印象是谷歌的蜘蛛还没有看到 HTTP/2。但正如@sbordet 指出的那样,升级到 HTTP/2 是可选的,所以请确保拥有一个也响应 HTTP/1.1 的站点。这里还有一些想法:

Google 的算法会惩罚速度较慢的网站,但在服务器中使用 HTTPS 不太可能对性能造成重大影响。 Using HTTPS can actually boost your SEO。与 HTTP/2 没有任何关系。 不支持 HTTP/2 的流行浏览器:Safari and IE。 Safari 不支持任何与 HTTP/2、AFAIK 兼容的 TLS 加密套件。但这不会导致问题,只要您首先在 TLS 服务器中列出与 HTTP/2 兼容的套件 hello:ECDHE-RSA-AES128-GCM-SHA256 和 ECDHE-RSA-AES256-GCM-SHA384 是我所知道的.然后您可以列出较弱的套件。

【讨论】:

谢谢,您对此有参考吗 - 使用 HTTPS 实际上可以提升您的 SEO 吗?相信我,我已经进行了一些性能测试,并且获得了巨大的成功。有没有办法做到这一点你知道吗?还没有人提出建议。 我更新了答案以向您展示我的意思。我对 HTTPS 造成的性能影响非常感兴趣。你能告诉我更多关于你的设置吗?

以上是关于为不支持 HTTP2 的用户提供 HTTP 版本的站点的主要内容,如果未能解决你的问题,请参考以下文章

“全链路”HTTP2.0加速,到底厉害在哪里?

将 --http2.0 选项与 curl 7.33.0 一起使用会提供不受支持的协议

使用 jdk8 加密以启用 http2 的 ALPN

nginx支持HTTP2的配置过程

奇怪的知识: okhttp 是如何支持 Http2 的?

我提供的是 http 还是 http2?