Есть ли способ добавить / удалить записи из кэша браузера? - PullRequest
1 голос
/ 20 сентября 2019

Сценарий:

  1. Пользователь ищет все теги, начинающиеся со слова test.
  2. Сервер возвращает ["test1", "test2", "test3"], с Cache-Control: max-age=86400 (1 день илидругое подходящее большое значение).
  3. Пользователь добавляет новый тег: test4.
  4. Пользователь повторяет поиск с шага 1. Браузер возвращает кэшированное значение с шага 2.

Можно ли обновить кэш браузера на шаге 3, чтобы выполнить одно из следующих действий?

  • Обновить кэшированный ответ, включив в него test4 или
  • Немедленно неверный кеш из шага 1.

Существует ли какой-то Javascript API, который позволяет взаимодействовать с кешем браузера?Я использую Fetch API для всех запросов.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Другим решением было бы использование сервисного работника для перехвата всех этих запросов и переписывания ответов на лету.Это, вероятно, выполнимо с помощью https://stackoverflow.com/a/42846899/72478 и https://developer.mozilla.org/en-US/docs/Web/API/Headers/delete

. Вы всегда удаляете заголовок кэша из ответов сервера, чтобы браузер никогда не кэшировал их в обычном кэше страницы (чтот полностью контролировать), но кеширую их в сервисном работнике "Cache Storage".Тогда работник службы будет полностью контролировать, какой ответ он вернет клиенту.

0 голосов
/ 20 сентября 2019

Решение заключается в том, чтобы на шаге 4 выдать запрос XHR, а также добавить параметр, который сделает запрос уникальным (новым) для браузера.Например, ?whatever.

Если только один пользователь влияет на состояние сервера, это один пользователь, тогда JavaScript может отслеживать, когда они влияют на состояние, чтобы начать использовать новый параметр «кеш-буфер».

Если, с другой стороны, состояние сервера может быть кем-либо изменено, тогда ваше единственное (простое) решение - постоянно запрашивать состояние сервера с новым параметром.Использование текущей временной метки для этого (например, ?1568952442135) обычно работает хорошо.

Это, конечно, не делает то, что вы просили, но решает проблему устаревших данных на клиенте.

...