web-dev-qa-db-ja.com

asp.net mvc Webアプリケーション内のOutputCache設定。キャッシングを防ぐための複数の構文

私はasp.net MVC Webアプリケーションに取り組んでおり、次のようにアクションメソッドのOutputCacheを定義するときに違いがあるかどうかを知る必要があります:

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

VS

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

VS

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

上記の3つの設定はすべて、データのキャッシュを禁止しますか、それともそれぞれの意味が異なりますか?

2番目の質問duration=0NoStore=trueの定義の主な違いは何ですか?両方ともキャッシュを防ぎますか?ありがとう

34
john Gu

NoStoreプロパティは、リクエストヘッダー内で_Cache-Control: no-store_を設定することにより、キャッシュされたコンテンツの永続的なコピーを保存しないことをプロキシサーバーとブラウザーに通知するために使用されます。

期間は、コントローラーアクションのコンテンツをキャッシュする期間を指定するだけです。 10秒。これにより、_Cache-Control: max-age_が0以上に設定されます。また、Expiresヘッダーに有効なタイムスタンプが設定されます。

最初の質問に対して、いいえ、3つのバリエーションは同じ意味を持ちません。

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

このようなキャッシュヘッダーを作成します

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

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

次のキャッシュヘッダーを作成します。

_Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
_

これは基本的に、キャッシュをすべて防止する場合に表示するものです。 VaryByParamはオプションで(少なくともMVC5では)、デフォルトはとにかく "*"なので、代わりに[OutputCache(NoStore = true, Location = OutputCacheLocation.None)]を使用できます。


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

パブリックキャッシュコントロールも作成します...

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

SOに適切な投稿があります。これは max-age = 0とno-cacheなど の違いを説明しています。

最後に、3つすべてがデータのキャッシュを妨げる可能性がありますが、それでも意味は異なります。

72
MichaC