【问题标题】:HTTP/2 with OkHttpHTTP/2 与 OkHttp
【发布时间】:2016-09-17 16:58:52
【问题描述】:

我正在尝试使用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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      或者,您可以将 conscrypt 与 apache、jetty 或 okhttpclient 一起使用,以获得 jdk8 本身的 ALPN 支持,

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

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

      【讨论】:

        猜你喜欢
        • 2021-08-25
        • 2019-04-27
        • 2015-03-23
        • 2017-03-04
        • 2016-08-22
        • 2015-10-29
        • 2015-12-12
        • 2017-02-23
        • 2015-08-20
        相关资源
        最近更新 更多