Java中的HTTP/2响应头
是否已经有一种方法可以在Java中获取HTTP/2响应头?我曾尝试搜索一些库,如URLConnection、Undertow甚至Jetty,但没有成功
注:我在Java项目中使用JDK1.7
另外,HTTP/2的响应头是这样的
GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
是否有任何网站已经使用此版本
我的主要目标是了解一个网站是否使用HTTP/2版本,是否有一种不需要阅读Java项目中的响应头就可以知道这一点的方法
谢谢
# 1 楼答案
HTTP/2网站通常使用TLS,因为浏览器只支持TLS上的HTTP/2
您尝试使用的方法是将HTTP/1.1升级到HTTP/2,很少有站点(如果有的话)支持该方法
您的代码片段表示请求,而不是响应。 如果升级成功,HTTP/2服务器将以HTTP/1.1格式发送101响应,并以HTTP/2格式发送对
GET
请求的响应。这是在RFC 7540, section 3.2中指定的为了实现您想要的,即了解网站是否支持HTTP/2,您必须尝试使用HTTP/2+TLS进行连接。如果连接成功,您就知道支持HTTP/2。如果失败,则不支持它
对于Jetty(免责声明,我是HTTP/2模块维护者),您必须使用JDK 8,代码如下所示:
如果得到的响应没有错误,则表示您使用的是HTTP/2,否则服务器不支持HTTP/2
请记住,要使代码正常工作,必须在bootclasspath中使用jdk8和适当的ALPN引导jar,如指定的here