Read more

Disabling client caching with Cache-Control: no-store

Dominik Schöler
May 04, 2021Software engineer at makandra GmbH

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.

Illustration online protection

Rails professionals since 2007

Our laser focus on a single technology has made us a leader in this space. Need help?

  • We build a solid first version of your product
  • We train your development team
  • We rescue your project in trouble
Read more Show archive.org snapshot

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.

Posted by Dominik Schöler to makandra dev (2021-05-04 08:40)