2013-02-12 46 views
3

我正在使用Apache cachingHttpClient從Java代碼中查詢REST API。cachingHttpclient不能忽略標題「Cache-Control:no-cache」

儘管收到導致cachingHttpClient不緩存文件的「Cache-Control:no-cache」頭,我想緩存一些http響應。

使用獨立http代理(如squid,mod_cache ...),我可以調整配置以忽略這些標題並覆蓋默認行爲。

我寧願不去獨立的http代理,而是去100%的java代碼。

  1. 是否有另一個http客戶端可以提供更多的緩存控制?
  2. 我可以實現一個會重寫頭文件的中間層/代理嗎?
  3. 可以通過繼承修補cachingHttpClient嗎?

回答

2

該請求被canCachedResponseBeUsed方法中的CachedResponseSuitabilityChecker拒絕。如果你需要不同的行爲,這是實現自己版本的類,然後使用長構造函數cachingHttpClient

CachingHttpClient(HttpClient backend, 
    CacheValidityPolicy validityPolicy, 
    ResponseCachingPolicy responseCachingPolicy, 
    HttpCache responseCache, 
    CachedHttpResponseGenerator responseGenerator, 
    CacheableRequestPolicy cacheableRequestPolicy, 
    CachedResponseSuitabilityChecker suitabilityChecker, 
    ConditionalRequestBuilder conditionalRequestBuilder, 
    ResponseProtocolCompliance responseCompliance, 
    RequestProtocolCompliance requestCompliance) 
+2

的拒絕點應該來自CacheableRequestPolicy。長構造函數不能被子類繼承。所以,你必須將整個源代碼複製到你的包中。這將使錯誤修復補丁變得困難。 – SXC 2013-02-13 03:20:51