web-dev-qa-db-fra.com

Paramètre OutputCache dans mon application Web asp.net mvc. Syntaxe multiple pour empêcher la mise en cache

Je travaille sur une application web asp.net MVC et j'ai besoin de savoir s'il y a des différences lors de la définition de OutputCache pour mes méthodes d'action comme suit: -

[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]

CONTRE

[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]

CONTRE

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

Les trois paramètres ci-dessus empêcheront-ils la mise en cache des données, ou chacun aura-t-il une signification différente?

Deuxième question quelle est la principale différence entre définir duration=0 & NoStore=true? les deux empêcheront-ils la mise en cache? Merci

34
john Gu

La propriété NoStore est utilisée pour informer les serveurs proxy et le navigateur qu'ils ne doivent pas stocker une copie permanente du contenu mis en cache en définissant Cache-Control: no-store Dans l'en-tête de la demande.

La durée spécifie simplement combien de temps le contenu de l'action du contrôleur doit être mis en cache, par ex. 10 secondes. Cela définira Cache-Control: max-age Sur> = 0. Et définit également l'en-tête Expires sur un horodatage valide.

À votre question initiale, non, les trois variantes n'ont pas la même signification.

[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]

créer un en-tête de cache comme celui-ci

Cache-Control: private, max-age=0
Expires: Fri, 03 Jan 2014 12:32:15 GMT

[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]

crée l'en-tête de cache suivant:

Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1

C'est essentiellement ce que vous voulez voir si vous voulez empêcher la mise en cache par tous les moyens. VaryByParam est facultatif (au moins dans MVC5) et la valeur par défaut est de toute façon "*", vous pouvez donc simplement utiliser [OutputCache(NoStore = true, Location = OutputCacheLocation.None)] à la place.


[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

crée même un contrôle de cache public ...

Cache-Control: public, no-store, max-age=0
Expires: Fri, 03 Jan 2014 12:36:38 GMT

Il y a un bon article sur SO qui discute de la différence entre max-age = 0 et no-cache etc. .

À la fin, les trois peuvent empêcher la mise en cache de vos données mais ont toujours des significations différentes.

72
MichaC