How do I implement client side http caching like a browser?

牧云@^-^@ 提交于 2019-12-04 09:54:23

The 4.0+ version of the Apache HttpComponents library comes with HTTP 1.1 cache support. You can use this with the Spring RestTemplate restful client as follows:

    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);

The situation with client side HTTP caches in Java is not particularly good. It is a non-trivial problem that has not been attacked by most of the HTTP client library developers.

I think that is changing slowly, but I cannot provide a definite pointer. A good way to start is to look at the various implementations of JAX-RS that come with a client side API such as Jersey (this has no client side cache). It might be that Restlet has one or Restfulie, please check.

Here is something I found via Google:

http://xircles.codehaus.org/projects/httpcache4j

You can also try to roll your own but you have to be careful to understand the caching headers (including Vary:) to get it right.

RestEasy features a client side caching mechanism which is trivial to get up and running if you are using such client.

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

LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);

You first create a client proxy instance, then wrap it around the cache. That's it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!