2

ISS で MVC3 Web サイトを実行しています。データベースから画像を取得するコントローラーがあります。実際にどの画像が取得されるかは、リクエストのホスト名に基づいて決定されます。URL は IIS の同じアプリケーションを参照します。

これは、キャッシュが有効になるまで正常に機能します。次のコードを使用して、サーバーとクライアントの両方でキャッシュを許可しました。

Response.Cache.SetExpires(DateTime.Now.AddHours(1));
Response.Cache.SetCacheability(System.Web.HttpCacheability.Public);

これにより、IIS は応答をキャッシュします。これはまさに私たちが見たいものです。ただし、IIS はキャッシュ時に異なるホスト名を区別していないようです。最初にhttp://hostA.site.com/image/23を取得すると、その後http://hostB.site.com/image/23を呼び出すと、IIS は前の要求からキャッシュされた画像を返します。これは、IIS が同じサイトと同じ URI を持っているため、これらの要求が同じであると見なすためだと思います。

ホストごとに異なるアプリケーションを作成することなく、これを機能させる方法を知っている人はいますか? 今のところ、Private の Cacheability を設定しましたが、IIS にこれらの画像をキャッシュさせたいと思っています。

4

1 に答える 1

0

キャッシュは、サーバーではなくクライアントで行われます。したがって、IIS を使用してコンテンツの有効期限ヘッダーを提供する場合を除いて、ここでは IIS は問題ではありません。

両方の URL が同じアプリケーションを参照している場合、URL に関係なく同じ有効期限ヘッダーを追加することになります。そのコードは、呼び出し元の URL を明示的に見て、それに応じて送信する応答を調整しない限り、どちらの場合でも実行されます。

var url = Request.Url.Host;
// Determine which host was called.
// Adjust cache to either 0 or 1 hour based on this
于 2012-04-21T23:20:13.147 に答える