我想在服务器端知道浏览器是否支持http2协议。
如何做到这一点?我可以以某种方式查询浏览器(从服务器/客户端)?
答案 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。