2017-12-01 25 views
0

네트워크 통화를 위해 Retrofit 및 OkHttp 클라이언트를 사용하고 있습니다. 내 서버는 Etag 캐싱을 지원하며 캐시를 okHttp 클라이언트에 추가했습니다. 내가 캐시하지 않는 일부 API가 있습니다OkHttp 캐싱에서 API 제외

이것은 내가 캐싱에서 몇개의 API를 무시할 수 있습니까 okHttpClient 설정

OkHttpClient okHttpClient(Context context, 
             HttpLoggingInterceptor loggingInterceptor,Cache okHttpCache) { 
      final OkHttpClient.Builder builder = new OkHttpClient.Builder() 
        .addInterceptor(loggingInterceptor) 
        .cache(okHttpCache) 
      return builder.build(); 
     } 


    Cache cache(Context context) { 
    return new Cache(new File(context.getCacheDir(), "cache"),10 * 1024 * 1024); 
    } 

입니까? URL이 캐시

public Iterator<String> urls() throws IOException { 
    hasNext(); 
    next(); 
    remove(); 
} 

당신은 간단한 사용이 관심하는 API에 대해 확인하고 그것을 무시하는 수의 요청에 대한

답변

0

OkHttp 라이브러리 만 사용하는 경우 캐시 제어 정책을 요청 개체에 CacheControl.FORCE_NETWORK으로 지정할 수 있습니다. 여기에 더 많은 정보 : https://github.com/square/okhttp/issues/1496

당신이 개조와 몇 OkHttp 사용하는 경우, 당신은 당신의 인터페이스 내부에 요청 정의 방법에 Cache-Control: no-cache 헤더를 추가 할 수 있습니다

@Headers("Cahce-Contol: no-cache") 
@GET("users/me") 
Call<User> getUser(); 
+0

를 잡으러 함께 몇 OkHttp 사용 개조, 현재 내 코드에 표시된대로 okHttp 설정에 캐시를 추가했습니다. 그것은 모든 API에 대한 캐시를 사용할 수 있습니까? 그리고 내가 원하지 않는 것은'@Headers ("Cahce-Contol : no-cache")'로 대체 할 수 있습니까? – Jrd

+0

백엔드 어플리케이션 핸들링 캐시 정책이 요청 헤더를 통해 전달 된 경우 그렇다. 서버가이를 지원하지 않으면 요청 인터셉터 구현을 기반으로하는 해결 방법이 있습니다. –

+0

당신의 서버가 Etag 캐싱 메커니즘을 지원한다면, 우리는이 설정을 제대로 할 수 있습니까? – Jrd