HTTP/2 使用 OkHttp
HTTP/2 with OkHttp
我正在尝试使用 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());
但是当我 运行 它打印时:
Protocol: http/1.1
和
This browser is not HTTP/2 enabled.
环境:Linux.
上的 OpenJDK 8
您需要额外的东西吗?我看到了一个叫做 "ALPN" 的东西,但不太理解这个概念。
ALPN 是 HTTP/2 所必需的,但它在 Java 桌面版中不可用,直到 JDK 9。在 Java 7 和 Java 8 中你需要一个名为 jetty-alpn 的 hack 来启用它。
(对于 Java 9,平台上有 ALPN,但仅在即将推出的 OkHttp 3.3 中。)
或者,您可以将 conscrypt 与 apache、jetty 或 okhttpclient 一起使用,以在 jdk8 本身中获得 ALPN 支持,
Security.insertProviderAt(Conscrypt.newProvider(), 1);
p.s: 使用 conscrypt-openjdk-uber jar 包含所有依赖项
我正在尝试使用 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());
但是当我 运行 它打印时:
Protocol: http/1.1
和
This browser is not HTTP/2 enabled.
环境:Linux.
上的 OpenJDK 8您需要额外的东西吗?我看到了一个叫做 "ALPN" 的东西,但不太理解这个概念。
ALPN 是 HTTP/2 所必需的,但它在 Java 桌面版中不可用,直到 JDK 9。在 Java 7 和 Java 8 中你需要一个名为 jetty-alpn 的 hack 来启用它。
(对于 Java 9,平台上有 ALPN,但仅在即将推出的 OkHttp 3.3 中。)
或者,您可以将 conscrypt 与 apache、jetty 或 okhttpclient 一起使用,以在 jdk8 本身中获得 ALPN 支持,
Security.insertProviderAt(Conscrypt.newProvider(), 1);
p.s: 使用 conscrypt-openjdk-uber jar 包含所有依赖项