を返すMVC4GETアクションメソッドがありますFileStreamResult
。SSLのみを使用し、提供されたドキュメントのキャッシュを許可しないという要件が存在するため、SSLでありOutputCache
、次のプロパティを持つフィルターも使用しました。
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None", Location = OutputCacheLocation.None)]
これは期待どおりに動作し、次の応答ヘッダーを生成します。
Cache-Control: no-cache, no-store
Expires: -1
Pragma: no-cache
IE8もサポートするように求められるまではすべて順調でした。また、ここにいる多くの人が、キャッシュなしのセットとSSLの両方が混在しているとダウンロードされないドキュメントに遭遇したことがあります。IE8以下の回避策は、実際には実行できないレジストリ設定を追加するか、基本的な要件に違反するキャッシュなしヘッダーを削除することです。
FiddlerとIE8を試してみたところ、プラグマを削除しただけでドキュメントをダウンロードできました。キャッシュなしのヘッダーですが、Cache-Control
ヘッダーはそのまま残しました。これは私の一時的なインターネットファイルにドキュメントのコピーを残していないように見えましたが、これをもう少しテストする必要があるかもしれません。
この情報を念頭に置いて、アクションのフィルターを使用してプラグマを削除するのは簡単な作業かもしれないと思いましたが、何をしても、OutputCache
設定する内容を変更することはできないようです。OutputCache
属性を削除して使用しました:
Response.Cache.SetCacheability(HttpCacheability.NoCache)
このメソッドを単独で使用すると、以前と同じキャッシュ設定を確実に取得できますが、このメソッド呼び出しの時点では設定されていません。これは、応答パイプラインのある時点で適用されるキャッシュポリシーを設定するだけですが、どこにあるのかわかりません。
応答パイプラインにフックして、書き込まれているキャッシュヘッダーを変更する方法があるかどうか誰かが知っていますか?
編集パイプラインに
単純なカスタムIHttpModule
を追加しました。これは、応答内のプラグマヘッダーを検索して削除NameValueCollection
し、キャッシュコントロールが設定されている間はプラグマがありません。これは、IIS 7.5がキャッシュコントロールに表示される内容に基づいてプラグマ自体を挿入していることを意味しますか?単純なWebサイトのデフォルト以外のものを設定していないことは確かです。
編集モジュール内
のヘッダー値を確認しましたCache-Control
。これはプライベートに設定されているため、キャッシュヘッダーはまだ応答に適用されていません。それで、おそらくモジュールが実行された後にキャッシュヘッダーが追加されるように見えますか?