SC_Chupacabra
SC_Chupacabra

Reputation: 14447

Express JS - Static files not being served from cache

I'm running an application on Express and my browser keeps fetching files that should've already been cached. The status code for the offending files is 304 and size is consistently 220 B / 221 B. Other resources (that are getting served properly), are showing '(from cache)'.

A bit more information: the ETags / file contents haven't changed and I've set some response headers.

    res.set('Cache-Control', 'max-age=345600');
    res.set('Expires', new Date(Date.now() + 345600000).toUTCString());

Cache Fail
(source: imageno.com)

Admittedly, I'm no HTTP expert, but maybe someone can help me understand why this might be happening?

Upvotes: 0

Views: 1019

Answers (1)

SC_Chupacabra
SC_Chupacabra

Reputation: 14447

Essentially, the browser IS caching and serving the cached bundles (although it doesn’t display the “from cache” message). In order to serve them, it sends a request to the server and checks if the file has changed. If it hasn’t changed, the server sends a 304 response code and the browser pulls the file from cache. This takes about 15-50 ms, so it's not a substantial performance impact.

However, I CAN force the browser to show the file without sending a verification req (like externally hosted libraries for example). That would require setting expires/cache-control headers for the far future, time-stamping the filenames for static assets and serving them dynamically (by maybe writing the updated filenames to a configuration file or something like that), but I think this would be more trouble than it’s worth honestly.

Just posting this response for anyone who runs into the same issue.

Upvotes: 1

Related Questions