2017-04-14 11 views
1

OkHttpClient에서 Retrofit 2를 사용하고 있습니다. keep-alive 속성을 가진 연결을 만들고 Https가 활성화 된 서버와 영구 연결을 만들고 싶습니다. 내가 요청이 다음과 HTTPS를 엔드 포인트에 네트워크 호출 Http2.0 프로토콜 헤더 연결 만드는 중이 때OkHttpClient가 Https 네트워크 통화 용 Http 1.1을 지원하지 않습니다.

지금 내 문제가 발생합니다 :는 무시됩니다 살아-유지하지만을 나는의 HTTP 엔드 포인트에 동일한 요청을 할 때 헤더가 받아 들여지고 지속적인 연결이 작동합니다. Https 호출을 위해 Http1.1 프로토콜을 사용하려면이 코드를 수동으로 OkHttpClient에 추가해야합니다.

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

는하지만 여전히 OkHttpClient HTTPS를 네트워크 통화 서버에 Http2.0 요청을 보냅니다.

나는 심지어 ConnectionPool 클래스를 사용하여 사용자 측에서 지속적인 연결을 유지하려고 시도했지만 좋은 해결책으로 찾지 못했습니다.

또한 Https 요청을 위해 내 OkHttpClient에 sslSocketFactory를 추가하려고 시도했습니다. 그것도 효과가 없었습니다.

OkHttpClient를 사용하여 내 Https 요청에 대해 Http1.1 프로토콜을 강제로 적용해야합니까?

답변

0

당신은 제대로이 행과 HTTP/1.1을 사용하는 OkHttp 강제하고 있습니다 : 당신이 빌더에 의해 생성 된 OkHttpClient 당신이 당신의 개조 인스턴스로 사용하고 하나는 확신

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

있습니까?

+0

예. 내 개장 사례가 싱글 톤입니다. Http에 보내질 때 동일한 요청은 Http1.1을 따르지만, Http1.1 프로토콜을 강제 지정 한 후에도 Http2.0을 따르는 경우에는 Http2.0을 따릅니다. – saurabhlahoti

+0

이것은 놀랍습니다. 작은 테스트 케이스에서 문제를 재현 할 수 있다면 OkHttp 문제 추적기에 버그를보고하십시오. –