OkHttpClient不支持Http 1.1进行Https网络调用

问题描述:

我使用的是OkHttpClient的Retrofit 2。我想连接具有keep-alive属性,以便与启用Https的服务器建立持久连接。OkHttpClient不支持Http 1.1进行Https网络调用

现在我的问题时,我想提出一个网络呼叫到HTTPS端点请求如下Http2.0协议和头部连接出现了:保持活跃被忽略,但是当我提出到http终点相同的请求标头被接受并且持续连接起作用。 所以要有Http调用Http1.1协议我手动添加到我的OkHttpClient。

OkHttpClient.Builder okhttpclient = new OkHttpClient.Builder(); 
okhttpclient.protocols(Arrays.asList(Protocol.HTTP_1_1)); 

但是,OkHttpClient仍然发送Http2.0请求到服务器进行Https网络调用。

我甚至试图通过使用类来保持用户端的持续连接,但没有发现这是一个很好的解决方案。

我也尝试添加一个sslSocketFactory到我的OkHttpClient的Https请求。这也没有奏效。

我应该如何强制Http1.1协议为我的Https请求与OkHttpClient?

你正确迫使OkHttp使用HTTP/1.1这条线:

okhttpclient.protocols(Arrays.asList(Protocol.HTTP_1_1)); 

是否确定由制造商生产的OkHttpClient是你与你的改造实例使用一个?

+0

是的。我的改造实例是单身人士。发送到Http后的相同请求遵循Http1.1,但在发送到Https时,即使在强制指定Http1.1协议之后,它自己也遵循Http2.0。 – saurabhlahoti

+0

这是令人惊讶的。如果您可以在一个小型测试用例中重现问题,请执行操作,然后向OkHttp问题跟踪器报告错误。 –