Disable client side caching

burktelefon picture burktelefon · Mar 31, 2011 · Viewed 21.4k times · Source

I've been searching for info on how to disable client side caching on project level. I know I can add the following before an action method:

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

I also read something about making profiles for caching, but that would also mean refering to them in several places. I would like a single setting in web.config, or maybe in IIS?

The project I'm working on contains a lot of partial views

Thank you in advance for any advice in this matter.

Answer

Tom picture Tom · May 16, 2012

You can disable browser caching via Web.Config:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="no-cache, no-store" />
                <add name="Pragma" value="no-cache" />
                <add name="Expires" value="-1" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

Source: http://blog.jamesjones.name/2009/11/how-to-disable-browser-caching-in.html

Edit: added no-store to Cache-Control for Chrome ( http://code.google.com/p/chromium/issues/detail?id=28035 )

You can set this at the project level or at the subdirectory level to control browser caching as desired. For example, in a primarily data-driven/dynamic site, I may set these headers at the project level, but in a /static directory (which contains my .js, .css, images), add another web.config which includes the appropriate </clear> directive, and perhaps set a far-future-expires header instead.