带有OkHttp的HTTP / 2

问题描述 投票:3回答:2

我正在尝试使用OkHttp客户端与HTTP / 2服务器通信。

添加到Maven POM:

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.2.0</version>
</dependency>    

这是我的测试代码:

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://http2.akamai.com/demo").build();
Response response = client.newCall(request).execute();
System.out.println("Protocol: " + response.protocol());
System.out.println(response.body().string());

但是当我运行它时会打印:

协议:http / 1.1

此浏览器未启用HTTP / 2。

环境:Linux上的OpenJDK 8。

你需要额外的东西吗?我看到了一个名为“ALPN”的东西,但并不完全理解这个概念。

okhttp http2
2个回答
6
投票

HTTP / 2需要ALPN,但在JDK 9之前它不能在桌面Java中使用。在Java 7和Java 8中,您需要一个名为jetty-alpn的hack来启用它。

(对于Java 9,平台上有ALPN,但仅在即将发布的OkHttp 3.3中。)


0
投票

或者,您可以使用conscrypt和okhttp3在jdk8中获得ALPN支持,

Security.insertProviderAt(Conscrypt.newProvider(), 1);

p.s:使用conscrypt-openjdk-uber jar来包含所有依赖项

© www.soinside.com 2019 - 2024. All rights reserved.