我有一个应用程序使用:
compile 'com.squareup.okhttp3:okhttp:2.7.0'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
compile 'com.squareup.okio:okio:1.6.0'
compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
并对服务器进行 API REST 调用。在 OKHttpClient 上启用 SPDY 3 时,会引发错误:
04-08 11:01:22.321 10628-10628/dts W/System.err: java.lang.IllegalArgumentException: protocols doesn't contain http/1.1: [spdy/3.1, h2]
04-08 11:01:22.321 10628-10628/dts W/System.err: at okhttp3.OkHttpClient$Builder.protocols(OkHttpClient.java:672)
我在 OKHttpClient 上找不到正确启用 SPDY/3 或错误代码的任何内容。目标站点已正确配置 SPDY/3。
我已经使用 SPDY3、HTTP/2 和 HTTP/1 的所有组合尝试了两种协议配置,应用程序在配置 HTTP/1 时工作,但如果仅启用 SPDY/3 则会引发错误:
okHttpClient = new OkHttpClient.Builder()
// .protocols(Collections.singletonList(Protocol.SPDY_3))
.protocols(Arrays.asList(Protocol.SPDY_3, Protocol.HTTP_2))
.retryOnConnectionFailure(true)
.connectTimeout(25, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(30, 120, TimeUnit.SECONDS))
.connectionSpecs(Collections.singletonList(spec))
.addInterceptor(new AddCookiesInterceptor())
.addInterceptor(new ReceivedCookiesInterceptor())
.cache(new okhttp3.Cache(cacheLocation, (500 * 1024 * 1024)))
.build();
}
我知道有人可能有想法,任何帮助将不胜感激。