8

We noticed Chrome caches files locally and doesn't even send a request to our server to check if there's a newer version of the javascript file.

Example of HTTP response headers for a js file that Google cached:

Accept-Ranges:bytes
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:*
Content-Encoding:gzip
Content-Length:5479
Content-Type:application/javascript
Date:Tue, 12 Jan 2016 22:46:07 GMT
ETag:"7d68e1ceb647d11:0"
Last-Modified:Tue, 05 Jan 2016 12:44:25 GMT
Server:Microsoft-IIS/8.5
Vary:Accept-Encoding
x-robots-tag:noindex

Is it valid that Chrome cached the file? There's no Cache-control header or something that declares that the file can be cached locally, it only has ETag and Last-Modified.


BTW

Is there a way (maybe a header) to instruct Chrome to check if the cached file has changed without appending version to the file name? Setting no-cache is not an option since I do want it to be cached, but I want to use the ETag and Last-Modified headers as it should.

gdoron
  • 147,333
  • 58
  • 291
  • 367
  • I'm not answering the main question but do you know of this? http://stackoverflow.com/a/7000899/704097 – Miquel Adell Jan 13 '16 at 08:57
  • Also possibly related: http://stackoverflow.com/questions/8294034/chrome-browser-is-not-sending-if-modified-since-header-to-server – Dor Rotman Jan 13 '16 at 09:19
  • @Miquel, yes I'm aware of that option in the dev tools. But I can't nor want my users to use it and clear the entire cache of my site... – gdoron Jan 13 '16 at 09:30

1 Answers1

3

Unless specifically constrained by a cache-control (section 14.9) directive, a caching system MAY always store a successful response (see section 13.8) as a cache entry, MAY return it without validation if it is fresh, and MAY return it after successful validation.

You can always use the must-revalidate directive.

When the must-revalidate directive is present in a response received by a cache, that cache MUST NOT use the entry after it becomes stale to respond to a subsequent request without first revalidating it with the origin server.

Source

David King
  • 46
  • 1
  • Hmm... I'm curious to know why you stopped quoting just before the spec says it's expected for caches not to cache responses where there is no indication that the response can be cached. "_If there is neither a cache validator nor an explicit expiration time associated with a response, we do not expect it to be cached, but certain caches MAY violate this expectation_" – gdoron Jan 16 '16 at 19:56