Как узнать дату и время ответа, кэшированного работником службы через Workbox? - PullRequest
0 голосов
/ 20 февраля 2019

В моем приложении пользователю важно знать, когда данные обновлялись в последний раз.

Например, предположим, что ответ от веб-API кэшируется следующим образом:

workbox.routing.registerRoute(
  /https:\/\/api\.service\.com\/resource.*/,
  workbox.strategies.cacheFirst({
    cacheName: 'resource',
    plugins: [
      new workbox.expiration.Plugin({
        maxAgeSeconds: ONE_HOUR,
      }),
    ]
  }),
)

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

Как узнать дату / время исходного ответа?

1 Ответ

0 голосов
/ 20 февраля 2019

Возможно, вы захотите получить эту информацию из заголовка Date: ответа.К сожалению, если вы имеете дело с ответом CORS от стороннего сервера, заголовок Date: по умолчанию недоступен - доступны только простые заголовки ответа .

Итакпервое, что вы хотели бы сделать, это убедиться, что используемый вами API устанавливает Access-Control-Expose-Headers: Date в своих ответах HTTP.

Я не знаю, как вы читаетеответ API в вашем веб-приложении, но давайте предположим, что вы используете fetch() для получения ответа (который может или не может быть получен из кэша работника сервиса), а затем обрабатываете ответ как JSON.Код для проверки заголовка Date: может выглядеть примерно так:

const response = await fetch('https://api.service.com/resource');
const dateAsString = response.headers.get('Date');
const dateAsMillis = Date.parse(dateAsString);

// Do something with dateAsMillis, like comparing it to Date.now().
if ((Date.now() - dateAsMillis) < SOME_THRESHOLD) {
  const json = await response.json();
  // Etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...