Java中的HTTP / 2响应头

时间:2015-11-09 16:38:19

标签: java http-headers http2

是否已经有办法在Java中获取HTTP / 2响应头?我试图搜索URLConnection,Undertow甚至Jetty等一些库,但没有成功。

P.S。:我在我的Java项目中使用JDK 1.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 个答案:

答案 0 :(得分:0)

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中使用JDK 8和正确的ALPN引导jar,如指定的here