2016-02-02 2 views
2

Поддерживает ли кеш службы поддержки кеширование кеша? Например, если запись в кеше имеет заголовки cache-control: no-store или cache-control: max-age=60, то они относятся к match()?Поддерживает ли кеш службы поддержки кеш-контроль?

Следующие выходы кода CACHE HIT, несмотря на заголовок cache-control: no-store, отображающийся в ответе. (Я думаю, что та же самая проблема относится к max-age.) Кэш работник

function warm(c) { 
    var req = new Request("/foo.txt"); 
    var res = new Response("hello", { 
    status: 200, 
    statusText: "OK", 
    headers: new Headers({ 
     "cache-control": "no-store", 
     "content-type": "text/plain" 
    }) 
    }); 
    return c.put(req, res).then(function() { return c; }); 
} 

function lookup(c) { 
    return c.match(new Request("/foo.txt")).then(function (r) { 
    return r ? "CACHE HIT" : "CACHE MISS"; 
    }); 
} 

function deleteAllCaches() { 
    return caches.keys().then(function (cacheNames) { 
    return Promise.all(
     cacheNames.map(function (cacheName) { 
     return caches.delete(cacheName); 
     }) 
    ); 
    }); 
} 

self.addEventListener('install', function (event) { 
    event.waitUntil(
    deleteAllCaches() 
    .then(caches.open.bind(caches, 'MYCACHE')) 
    .then(warm) 
    .then(lookup) 
    .then(console.log.bind(console)) 
    .then(function() { return true; }) 
); 
}); 

ответ

5

Служба не ведет себя как стандартный RFC-compliant HTTP cache. В частности, он игнорирует все заголовки, которые относятся к «свежести» (например, cache-control). Обратите внимание, однако, что он ведет себя так, как ожидалось, относительно заголовка vary. (См. cache resolution algorithm в спецификации.)

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

Смежные вопросы