2

我在 ISS 运行一个 MVC3 网站。我们有一个从数据库中获取图像的控制器。实际获取哪个图像取决于请求的主机名,例如http://hostA.site.com/image/23返回与http://hostB.site.com/image/23不同的图像,即使两者都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 不是这里的问题,除非您使用它来提供内容过期标头。

如果两个 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 回答