Получить заголовок ответа кэшированного ответа внутри сервисного работника - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу получить заголовки ответа кэшированного ответа внутри сервисного работника. Цель этого состоит в том, чтобы я мог прочитать пользовательский заголовок с именем «Модифицированный», чтобы увидеть, нужно ли извлекать новую копию данных, сравнивая ее с заголовками ответа выборки «HEAD» для того же URL.

При установке сервисного работника я заполняю кеш, называемый v1 :: основами, с некоторыми ответами. Затем я регистрирую прослушиватель выборки, который ищет запрос в кэше и, если он есть, обслуживает его. Затем я хочу асинхронно обновить кэш нестандартным содержимым, но только если заголовок «Модифицированный» содержит более новую временную метку, чем в кеше. В приведенном ниже упрощенном коде я пытаюсь получить доступ к заголовкам с помощью headers.get (), но в ответ я всегда получаю нулевое значение. Почему это?

Когда я смотрю на кэш в Chrome devtools, там очень много заголовков, я просто не могу получить к ним доступ из сервисного работника.

self.addEventListener('fetch', event => {
  console.log('%c[SW] Fetch caught: ', 'color: #42d9f4', event.request.url);

  // Let the browser do its default thing for non-GET requests.
  if (event.request.method != 'GET') {
    return;
  } else {
    // Prevent the default, and handle the request ourselves.
    event.respondWith(async function() {
      // Try to get the response from a cache.
      const cache = await caches.open('v1::fundamentals');
      const cachedResponse = await cache.match(event.request);

      if (cachedResponse) {
        // Try to get the headers
        var cacheDate = cachedResponse.headers.get('Modified');
        // Print header, returns 'null'
        console.log(cacheDate);

        event.waitUntil(cache.add(event.request));

        return cachedResponse;
      }

      return fetch(event.request);
    }());
  }
});
...