如何像浏览器一样实现客户端http缓存?

如何像浏览器一样实现客户端http缓存?,http,restlet,resteasy,http-caching,Http,Restlet,Resteasy,Http Caching,我使用RESTFul服务作为前端的后端。服务在其响应上设置expires/etag/lastmodified标头 我正在寻找的是一个客户端(最好是java)库,它可以从服务中获取数据,并将其缓存在可插拔的缓存后端(如ehcache)中 我还希望能够做到的是,一旦条目无效,就使用后台工作线程自动初始化缓存。此外,执行条件get应该是明智的 我遇到过 还有其他人知道的图书馆吗?这不是一个相当常见的问题吗?Java中客户端HTTP缓存的情况不是特别好。这是一个非常重要的问题,大多数HTTP客户机库开

我使用RESTFul服务作为前端的后端。服务在其响应上设置expires/etag/lastmodified标头

我正在寻找的是一个客户端(最好是java)库,它可以从服务中获取数据,并将其缓存在可插拔的缓存后端(如ehcache)中

我还希望能够做到的是,一旦条目无效,就使用后台工作线程自动初始化缓存。此外,执行条件get应该是明智的

我遇到过


还有其他人知道的图书馆吗?这不是一个相当常见的问题吗?

Java中客户端HTTP缓存的情况不是特别好。这是一个非常重要的问题,大多数HTTP客户机库开发人员都没有攻击过它

我认为这一点变化很慢,但我不能提供一个明确的指标。一个好的开始方式是查看客户端API(如Jersey)附带的各种JAX-RS实现(它没有客户端缓存)。可能是Restlet有一个或多个Restfulie,请检查

下面是我通过谷歌找到的一些东西:

您也可以尝试运行自己的缓存头,但您必须仔细理解缓存头(包括Vary:),才能正确使用它。

RestEasy提供了一种机制,如果您使用这样的客户端,则启动和运行该机制非常简单

RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
YourService proxy = ProxyFactory.create(YourService.class, url);

LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);

首先创建一个客户端代理实例,然后将其环绕在缓存中。就是这样。

4.0+版本的Apache HttpComponents库附带了HTTP 1.1缓存支持。您可以将其用于Spring RestTemplate restful客户端,如下所示:

    CacheConfig cacheConfig = new CacheConfig();  
    cacheConfig.setMaxCacheEntries(1000);
    cacheConfig.setMaxObjectSize(8192);

    HttpClient cachingClient = new CachingHttpClient(new DefaultHttpClient(), cacheConfig);

    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(cachingClient);
    RestTemplate rest = new RestTemplate(requestFactory);