diff --git a/src/serve_style.js b/src/serve_style.js index 5cad141..bfc1a45 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -118,7 +118,7 @@ export const serve_style = { if (!item || !validatedFormat) { if (verbose) console.error( - `Sprite item, format, or scale not found for: /styles/%s/sprite/%s%s%s`, + `Sprite item or format not found for: /styles/%s/sprite/%s%s%s`, sanitizedId, sanitizedSpriteID, sanitizedScale, @@ -126,13 +126,12 @@ export const serve_style = { ); return res.sendStatus(404); } - const sprite = item.spritePaths.find((sprite) => sprite.id === spriteID); const spriteScale = allowedSpriteScales(scale); if (!sprite || spriteScale === null) { if (verbose) console.error( - `Sprite not found for: /styles/%s/sprite/%s%s%s`, + `Bad Sprite ID or Scale for: /styles/%s/sprite/%s%s%s`, sanitizedId, sanitizedSpriteID, sanitizedScale, @@ -141,6 +140,14 @@ export const serve_style = { return res.status(400).send('Bad Sprite ID or Scale'); } + const modifiedSince = req.get('if-modified-since'); + const cc = req.get('cache-control'); + if (modifiedSince && (!cc || cc.indexOf('no-cache') === -1)) { + if (new Date(item.lastModified) <= new Date(modifiedSince)) { + return res.sendStatus(304); + } + } + const sanitizedSpritePath = sprite.path.replace(/^(\.\.\/)+/, ''); const filename = `${sanitizedSpritePath}${spriteScale}.${validatedFormat}`; if (verbose) console.log(`Loading sprite from: %s`, filename); @@ -156,6 +163,7 @@ export const serve_style = { ); return res.sendStatus(404); } + if (validatedFormat === 'json') { res.header('Content-type', 'application/json'); } else if (validatedFormat === 'png') { @@ -169,6 +177,7 @@ export const serve_style = { sanitizedScale, sanitizedFormat, ); + res.set({ 'Last-Modified': item.lastModified }); return res.send(data); }); });