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

前端 未结 1 495
说谎
说谎 2020-12-07 23:01

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:-



        
相关标签:
1条回答
  • 2020-12-07 23:22

    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.

    0 讨论(0)
提交回复
热议问题