I am working on an asp.net MVC web application and I need to know if there are any differences when defining the OutputCache for my action methods as follow:-
[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]
VS
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
VS
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
Will all the above three setting prevent caching the data , or each on have different meaning ?
Second question what is the main difference between defining duration=0 & NoStore=true ? will both of them prevent caching ?
Thanks
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The NoStore property is used to inform proxy servers and browser that they should not store a permanent copy of the cached content by setting Cache-Control: no-store within the request header.
Duration simply specifies how long the content of the controller action should be cached, e.g. 10seconds. This will set the Cache-Control: max-age to >= 0. And also sets the Expires header to a valid timestamp.
To your initial question, no, the three variations do not have the same meaning.
[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]
create a cache-header like this
Cache-Control: private, max-age=0 Expires: Fri, 03 Jan 2014 12:32:15 GMT
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
creates the following cache-header:
Cache-Control: no-cache, no-store Pragma: no-cache Expires: -1
This is basically what you want to see if you want to prevent caching by all means. VaryByParam is optional (at least in MVC5) and the default is “*” anyways, so you can simply use [OutputCache(NoStore = true, Location = OutputCacheLocation.None)] instead.
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
even creates a public cache control…
Cache-Control: public, no-store, max-age=0 Expires: Fri, 03 Jan 2014 12:36:38 GMT
There is a good post on SO which discusses the difference between max-age=0 and no-cache etc..
At the end all three might prevent caching your data but still have different meanings.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0