В чем разница между кешированием через Javascript и установкой заголовка HTTPResponse на сервере

В интерфейсе я использую AngularJS "$ resource" для запроса GET, а на бэкэнд я использую SpringMVC, чтобы разоблачить мои методы. Спокойный способ.

Теперь я хочу кэшировать только некоторые из моих запросов GET. Я заметил, что есть несколько способов сделать это, как использование $cacheFactory. Или что-то вроде:

 return {
   Things: $resource('url/to/:thing', {}, {
   list : {
   method : 'GET',
   cache : true
  }
 };

Обратите внимание, что это также может быть простой ajax-вызов с некоторыми параметрами кеша и не обязательно использовать angularJS.

Таким образом, вместо того, чтобы на клиенте, использующем такой подход, интересно, что это можно сделать на сервере, просто используя Java, задав кеширование только в заголовке Response примерно так:

response.setHeader("Cache-Control: max-age=2592000");

В чем разница между этими двумя подходами? какой подход следует использовать, если?

P.S этот вопрос НЕ является кешированием на стороне сервера и вопросом кэширования на стороне клиента, я просто устанавливаю заголовок HTTPResponse на сервере, что все.

Ответ 1

Я считаю, что вы имеете в виду кэширование на двух разных уровнях.

Angular cache (см. $cacheFactory) является кешем Javascript в памяти. Кэш хранит данные в объекте Javascript. У вас есть контроль над ними в клиенте. Кэш не будет сохраняться, так как он исчезнет после перехода на другую веб-страницу или обновления, если вы не реализуете собственный кеш, который сохраняется в локальном хранилище.

Параметр Cache-Control в ответе управляет кешем браузера. Вы не можете напрямую манипулировать этим кешем из Javascript. Но если вы правильно настроите заголовки кеша, они будут сохраняться на всех сеансах. Он также позволяет любым промежуточным прокси-серверам, которые могут обслуживать несколько клиентов, знать, могут ли они кэшировать запрос, уменьшая общий трафик больше, чем кеш Javascript.

Что касается того, какой подход следует использовать, когда я бы сказал, что в целом полагаюсь на кеш браузера, так как он намного ниже и сохраняется на всех сеансах. Если вам нужно больше контролировать то, что получает кеширование, которое можно только разумно получить на стороне клиента, используйте кеш Javascript. Или вы можете просто включить оба варианта и получить преимущества обоих, и нести с дополнительным обслуживанием/сложностью кода.