2016-02-02 115 views
2

服務工作者緩存是否支持緩存控制頭?例如,如果高速緩存中的條目具有標頭cache-control: no-storecache-control: max-age=60,則match()是否遵守這些標頭?服務工作者緩存是否支持緩存控制頭文件?

儘管報頭cache-control: no-store出現在響應中,但以下代碼輸出CACHE HIT。 (我想同樣的問題適用於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的緩存行爲,則需要在現有緩存​​功能的頂部對此進行分層。