OutputCache setting inside my asp.net mvc web application. Multiple syntax to prevent caching

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

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x