Как реализовать кэширование http на стороне клиента, как в браузере? - PullRequest
4 голосов
/ 01 октября 2011

Я использую сервис RESTFul в качестве бэкэнда для моего веб-интерфейса.Служба устанавливает заголовки expires / etag / lastmodified в своих ответах.

Я ищу библиотеку на стороне клиента (предпочтительно java), которая может извлекать данные из службы и кэшировать их в подключаемом бэкэнде кэшированиякак ehcache.

Я также хочу иметь возможность автоматически заполнять кеш, используя фоновые рабочие потоки, как только запись становится недействительной.Кроме того, было бы разумно делать условные GET.

Я встречал http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html

Есть ли какая-нибудь другая библиотека, о которой кто-нибудь знает?Разве это не довольно распространенная проблема?

Ответы [ 3 ]

10 голосов
/ 14 сентября 2012

Версия 4.0+ библиотеки Apache HttpComponents поставляется с поддержкой кэша HTTP 1.1. Вы можете использовать это с отдыхающим клиентом Spring RestTemplate следующим образом:

    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 голосов
/ 01 октября 2011

Ситуация с HTTP-кешами на стороне клиента в Java не особенно хороша.Это нетривиальная проблема, которая не подвергалась критике со стороны большинства разработчиков клиентской библиотеки HTTP.

Я думаю, что она меняется медленно, но я не могу предоставить определенный указатель.Хороший способ начать - взглянуть на различные реализации JAX-RS, которые поставляются с клиентским API, таким как Jersey (в нем нет кэша на стороне клиента).Может быть, что у Restlet есть один или Restfulie, пожалуйста, проверьте.

Вот что я нашел с помощью Google:

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

Вы также можете попробовать свернуть свои собственные, но вы должны быть осторожны, чтобы понять заголовки кэширования (включаяВарь :), чтобы понять это правильно.

1 голос
/ 03 ноября 2011

RestEasy имеет механизм кэширования на стороне клиента , который легко запустить и запустить, если вы используете такой клиент.

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

LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);

Сначала вы создаете экземпляр прокси-клиента клиента, а затем переносите егоэто вокруг кеша.Вот и все.

...