Disabling client caching with Cache-Control: no-store

Updated . Posted . Visible to the public.

Browsers usually cache website content in order to provide the user with faster responses. Examples are returning to a website using the "Back" button, or reopening a browser and restoring previous tabs.

However, there are applications where this kind of client caching produces annoying results: a time tracking tool may show a wrong clock-in state, or an SPA todo app may display an outdated list. In these cases, client caching should be disabled.

In order to prevent client caching, set a Cache-Control header of no-store. This tells the browser to not cache this response, and it will fetch a fresh copy any time the page is opened again.

You can do that by adding a filter to your ApplicationController like this:

before_filter :disable_browser_caching!

def disable_browser_caching!
  response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
end

Keep in mind that reverse proxies, caches, or a CDN may overwrite these settings.

Dominik Schöler
Last edit
Dominik Schöler
License
Source code in this card is licensed under the MIT License.
Posted by Dominik Schöler to makandra dev (2021-05-04 06:40)