Remove "immutable" from long-term responses

We had a bug recently which sent out some bad "immutable" responses. We
need to have a better process around cutting releases before we can be
sure it doesn't happen again.
This commit is contained in:
Michael Jackson 2019-01-06 21:10:18 -08:00
parent e4d6df255e
commit d6fde9fb33
6 changed files with 23 additions and 21 deletions

View File

@ -20,7 +20,7 @@ function serveHTMLModule(req, res) {
.set({ .set({
'Content-Length': Buffer.byteLength(code), 'Content-Length': Buffer.byteLength(code),
'Content-Type': getContentTypeHeader(req.entry.contentType), 'Content-Type': getContentTypeHeader(req.entry.contentType),
'Cache-Control': 'public, max-age=31536000, immutable', // 1 year 'Cache-Control': 'public, max-age=31536000', // 1 year
ETag: etag(code), ETag: etag(code),
'Cache-Tag': 'file, html-file, html-module' 'Cache-Tag': 'file, html-file, html-module'
}) })

View File

@ -14,7 +14,7 @@ function serveJavaScriptModule(req, res) {
.set({ .set({
'Content-Length': Buffer.byteLength(code), 'Content-Length': Buffer.byteLength(code),
'Content-Type': getContentTypeHeader(req.entry.contentType), 'Content-Type': getContentTypeHeader(req.entry.contentType),
'Cache-Control': 'public, max-age=31536000, immutable', // 1 year 'Cache-Control': 'public, max-age=31536000', // 1 year
ETag: etag(code), ETag: etag(code),
'Cache-Tag': 'file, js-file, js-module' 'Cache-Tag': 'file, js-file, js-module'
}) })

View File

@ -35,7 +35,7 @@ function serveMetadata(req, res) {
res res
.set({ .set({
'Cache-Control': 'public, max-age=31536000, immutable', // 1 year 'Cache-Control': 'public, max-age=31536000', // 1 year
'Cache-Tag': 'meta' 'Cache-Tag': 'meta'
}) })
.send(metadata); .send(metadata);

View File

@ -15,7 +15,7 @@ function serveStaticFile(req, res) {
.set({ .set({
'Content-Length': req.entry.size, 'Content-Length': req.entry.size,
'Content-Type': getContentTypeHeader(req.entry.contentType), 'Content-Type': getContentTypeHeader(req.entry.contentType),
'Cache-Control': 'public, max-age=31536000, immutable', // 1 year 'Cache-Control': 'public, max-age=31536000', // 1 year
'Last-Modified': req.entry.lastModified, 'Last-Modified': req.entry.lastModified,
ETag: etag(req.entry.content), ETag: etag(req.entry.content),
'Cache-Tag': tags.join(', ') 'Cache-Tag': tags.join(', ')

View File

@ -92,7 +92,7 @@ function filenameRedirect(req, res) {
// and URLs resolve correctly. // and URLs resolve correctly.
res res
.set({ .set({
'Cache-Control': 'public, max-age=31536000, immutable', // 1 year 'Cache-Control': 'public, max-age=31536000', // 1 year
'Cache-Tag': 'redirect, filename-redirect' 'Cache-Tag': 'redirect, filename-redirect'
}) })
.redirect( .redirect(

View File

@ -12,7 +12,7 @@ function indexRedirect(req, res, entry) {
// resolve correctly. // resolve correctly.
res res
.set({ .set({
'Cache-Control': 'public, max-age=31536000, immutable', // 1 year 'Cache-Control': 'public, max-age=31536000', // 1 year
'Cache-Tag': 'redirect, index-redirect' 'Cache-Tag': 'redirect, index-redirect'
}) })
.redirect( .redirect(
@ -94,24 +94,26 @@ function searchEntries(tarballStream, entryName, wantsIndex) {
const chunks = []; const chunks = [];
stream.on('data', chunk => chunks.push(chunk)).on('end', () => { stream
const content = Buffer.concat(chunks); .on('data', chunk => chunks.push(chunk))
.on('end', () => {
const content = Buffer.concat(chunks);
// Set some extra properties for files that we will // Set some extra properties for files that we will
// need to serve them and for ?meta listings. // need to serve them and for ?meta listings.
entry.contentType = getContentType(entry.name); entry.contentType = getContentType(entry.name);
entry.integrity = getIntegrity(content); entry.integrity = getIntegrity(content);
entry.lastModified = header.mtime.toUTCString(); entry.lastModified = header.mtime.toUTCString();
entry.size = content.length; entry.size = content.length;
// Set the content only for the foundEntry and // Set the content only for the foundEntry and
// discard the buffer for all others. // discard the buffer for all others.
if (entry === foundEntry) { if (entry === foundEntry) {
entry.content = content; entry.content = content;
} }
next(); next();
}); });
}); });
}); });
} }