HTTP/2 与 OkHttp
Posted
技术标签:
【中文标题】HTTP/2 与 OkHttp【英文标题】:HTTP/2 with 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”的东西,但不太明白这个概念。
【问题讨论】:
【参考方案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 包含所有依赖项
【讨论】:
以上是关于HTTP/2 与 OkHttp的主要内容,如果未能解决你的问题,请参考以下文章
OkHttpOkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )
Android 普通okhttpokhttp utils执行 post get请求,文件上传下载请求图片
OkHttpOkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
OkHttpOkHttp 上传图片 ( 获取 SD 卡动态权限 | 跳转到相册界面选择图片 | 使用 OkHttp 上传图片文件 )
OkHttpOkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )