2013-02-12 116 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