&quot;Immutable&quot; with &quot;max age&quot; is an oxymoron.  If it expires it isn&#x27;t immutable. Use another word.<p>What you need is an absolute date and time in the cache header which says &quot;we promise this page does not change before this date and time&quot;. This could be treated as a &quot;lease&quot; and automatically extended in some configurable intervals. For instance, if it is 30 days, then the file is good for 30 days since its modification time stamp. When that time passes, this is renewed automatically: it is now good for 60 days since its modification time stamp. Basically, it is always good for N*30 days since its modification time stamp, where N is the smallest N required for that time to be in the future.<p>When the webmaster publishes a new version of the file, he or she knows precisely when browsers who have seen the cached the previous version will start picking up the new one. Changes can be co-ordinated with the expiry time to minimize the refresh lag: the time between when the earliest new client sees the new page, and the last old client stop seeing the old one.  If we know that a page expires for everyone on June 1, 2016 at noon, we can update that page in the morning on June 1. By afternoon, everyone sees the new one.