有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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,代码如下所示:

    // Setup.
    HTTP2Client http2Client = new HTTP2Client();
    SslContextFactory sslContextFactory = new SslContextFactory();
    HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
    httpClient.start();
    
    // Does webtide.com support HTTP/2 ?
    ContentResponse response = httpClient.GET("https://webtide.com/");
    // No errors, yes it supports HTTP/2 !
    

    如果得到的响应没有错误,则表示您使用的是HTTP/2,否则服务器不支持HTTP/2

    请记住,要使代码正常工作,必须在bootclasspath中使用jdk8和适当的ALPN引导jar,如指定的here