我正在尝试使用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”的东西,但并不完全理解这个概念。
HTTP / 2需要ALPN,但在JDK 9之前它不能在桌面Java中使用。在Java 7和Java 8中,您需要一个名为jetty-alpn的hack来启用它。
(对于Java 9,平台上有ALPN,但仅在即将发布的OkHttp 3.3中。)
或者,您可以使用conscrypt和okhttp3在jdk8中获得ALPN支持,
Security.insertProviderAt(Conscrypt.newProvider(), 1);
p.s:使用conscrypt-openjdk-uber jar来包含所有依赖项