如何判断浏览器是否支持http2?

时间:2016-07-31 12:31:43

标签: http2

我想在服务器端知道浏览器是否支持http2协议。

如何做到这一点?我可以以某种方式查询浏览器(从服务器/客户端)?

2 个答案:

答案 0 :(得分:2)

发送HTTP / 2请求的浏览器在请求行中发送HTTP协议版本字符串:

GET / HTTP/2.0
Host: domain.com

发送HTTP / 1.1请求的浏览器以这种方式发送它:

GET / HTTP/1.1
Host: domain.com

根据您在服务器上使用的API,您可以查询请求的协议版本,并获取该特定请求的值。

例如,如果您在服务器上使用Servlet API,则可以执行以下操作:

String protocol = httpServletRequest.getProtocol();
if (protocol.startsWith("HTTP/2")) {
    // Your logic here.
}

或者,您可以向服务器查询特定连接的协商ALPN协议。

此API尚未在Servlet API中提供,但您可以从供应商特定的API获取此信息。

通过这种方式,您将知道特定请求是HTTP / 2,但这足以告诉您浏览器确实支持HTTP / 2.

支持HTTP / 2的浏览器更喜欢在HTTP / 1.1上使用HTTP / 2,因此您通常可以排除浏览器 支持HTTP / 2但由于某种原因使用HTTP / 2发送请求的情况HTTP / 1.1。

答案 1 :(得分:1)

有些服务器提供support for that

如果失败,您可以始终使用用户代理字符串,并为知名用户代理执行一些字符串映射与版本剪切。我知道例如curl支持从版本7.43开始的HTTP / 2。通常,2015年夏季之后发布的主要浏览器版本应支持HTTP / 2。