无法在java中使用cachingHttpClient缓存HttpResponse?

无法在java中使用cachingHttpClient缓存HttpResponse?,java,caching,httpresponse,Java,Caching,Httpresponse,我试图使用cachingHttpClient缓存HTTP响应,但徒劳。 这是我参考这个链接制作的演示 这是一个简单的程序,但我不知道我错在哪里。谢谢你的帮助。谢谢。带有url的GET请求将以Http 404代码结束(未找到)。这个结果很可能无法缓存,所以我想这就是为什么它对您不起作用的原因 更新: 必须满足某些条件才能为来自缓存的响应提供服务。 您应该启用apache http客户端的日志记录(例如)。然后,您可以调试正在发生的事情以及其他URL的缓存未命中原因。您可能还应该下载该库的源代码并在

我试图使用cachingHttpClient缓存HTTP响应,但徒劳。 这是我参考这个链接制作的演示

这是一个简单的程序,但我不知道我错在哪里。谢谢你的帮助。谢谢。

带有url的GET请求将以Http 404代码结束(未找到)。这个结果很可能无法缓存,所以我想这就是为什么它对您不起作用的原因

更新: 必须满足某些条件才能为来自缓存的响应提供服务。 您应该启用apache http客户端的日志记录(例如)。然后,您可以调试正在发生的事情以及其他URL的缓存未命中原因。您可能还应该下载该库的源代码并在那里查看一下(http://hc.apache.org/downloads.cgi). 您尤其会对
org.apache.http.impl.client.cache.CachedResponseSuitabilityChecker
类感兴趣。这也将有助于您对该库的后续开发

顺便说一句,返回此标题:

缓存控制:无存储,无缓存,必须重新验证,后检查=0,预检查=0,最大年龄=0,无缓存,无存储

由于
CachedResponseSuitabilityChecker
中的if语句:

            if (HeaderConstants.CACHE_CONTROL_NO_CACHE.equals(elt.getName())) {
                log.trace("Response contained NO CACHE directive, cache was not suitable");
                return false;
            }
缓存将不被使用


祝你好运;)

默认情况下,CachingHttpClient假定共享缓存,因此,如果响应头包含“cache Control:private”(在您的情况下,我认为就是这样),它将忽略存储。见@(第6.4节配置)

尝试将其关闭,以便能够在仅客户端模式下使用,即

CacheConfig cacheConfig = new CacheConfig();
cacheConfig.setMaxCacheEntries(1000);
cacheConfig.setMaxObjectSizeBytes(1024 * 1024);
cacheConfig .setSharedCache(false); // Turn it OFF here

这对我有用。祝你好运

你期望发生什么?实际发生了什么?@artbristol我希望在第二次发送相同的http请求时命中缓存。如果您运行这个示例,那么缓存未命中的两次都会发生。好的,首先我将url替换为,它给了我一个缓存命中。但是当替换为时,会出现缓存丢失。@HarshalKshatriya查看更新的答案。我希望它能给你下一个问题的答案。谢谢你的帮助。如果有任何问题,我会尽力回复。@如果你的答案对你有帮助,或者你觉得它在某些方面是有价值的,请考虑投票。下次你很可能会得到帮助。正在返回
Cache control=>private,必须重新验证,max age=0
,知道如何缓存响应吗?谢谢。任何关于如何缓存
缓存控制=>private的想法都必须重新验证,最大年龄=0
。谢谢
CacheConfig cacheConfig = new CacheConfig();
cacheConfig.setMaxCacheEntries(1000);
cacheConfig.setMaxObjectSizeBytes(1024 * 1024);
cacheConfig .setSharedCache(false); // Turn it OFF here