diff --git a/packages/sirv/index.js b/packages/sirv/index.js index 9e4093c..b1ed5b8 100644 --- a/packages/sirv/index.js +++ b/packages/sirv/index.js @@ -44,7 +44,7 @@ function viaLocal(dir, isEtag, uri, extns) { stats = fs.statSync(abs); if (stats.isDirectory()) continue; headers = toHeaders(name, stats, isEtag); - headers['Cache-Control'] = 'no-store'; + headers['Cache-Control'] = isEtag ? 'no-cache' : 'no-store'; return { abs, stats, headers }; } } diff --git a/tests/sirv.js b/tests/sirv.js index 27a22b9..fb25f38 100644 --- a/tests/sirv.js +++ b/tests/sirv.js @@ -602,6 +602,17 @@ dev('should not rely on file cached data', async () => { } }); +dev('should set default `Cache-Control` header value', async () => { + let server = utils.http({ dev: true }); + + try { + let res1 = await server.send('GET', '/bundle.67329.js'); + assert.is(res1.headers['cache-control'], 'no-store'); + } finally { + server.close(); + } +}); + dev.run(); // --- @@ -648,6 +659,22 @@ etag('should allow "If-None-Match" directive to function', async () => { } }); +etag('should force `Cache-Control` header in `dev` mode', async () => { + let server = utils.http({ etag: true, dev: true }); + + try { + let res1 = await server.send('GET', '/bundle.67329.js'); + assert.is(res1.headers['cache-control'], 'no-cache'); + + let headers = { 'If-None-Match': res1.headers['etag'] }; + let res2 = await server.send('GET', '/bundle.67329.js', { headers }); + assert.is(res2.statusCode, 304, 'send 304 for "no change" signal'); + assert.is(res2.data, '', 'send empty response body'); + } finally { + server.close(); + } +}); + etag.run(); // ---