【问题标题】:How do I implement client side http caching like a browser?如何像浏览器一样实现客户端 http 缓存?
【发布时间】:2011-10-01 06:33:07
【问题描述】:
【问题讨论】:
标签:
http
restlet
resteasy
http-caching
【解决方案1】:
Apache HttpComponents 库的 4.0+ 版本带有 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);
【解决方案2】:
Java 中客户端 HTTP 缓存的情况并不是特别好。这是一个不小的问题,大多数 HTTP 客户端库开发人员都没有攻击过。
我认为这种情况正在缓慢变化,但我无法提供明确的指针。一个好的开始方法是查看 JAX-RS 的各种实现,这些实现带有客户端 API,例如 Jersey(它没有客户端缓存)。可能是 Restlet 有一个或 Restfulie,请检查。
这是我通过 Google 找到的:
http://xircles.codehaus.org/projects/httpcache4j
您也可以尝试自己滚动,但您必须小心理解缓存标头(包括 Vary:) 才能正确使用。
【解决方案3】:
RestEasy 具有client side caching 机制,如果您使用此类客户端,启动和运行该机制很简单。
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
YourService proxy = ProxyFactory.create(YourService.class, url);
LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);
您首先创建一个客户端代理实例,然后将其包裹在缓存中。就是这样。