我有一个准备menu sprite from a bunch of PNG images的控制器。由于这是一个CPU密集型过程,图像并没有真正改变,我在控制器上设置了一个OutputCache属性,如下所示:
[OutputCache(Duration = Int32.MaxValue)]
public ActionResult MenuPNGImage()
{
MenuSprite ms = MenuSprite.BuildFromImages();
return File(ms.PNGImageBytes, "image/png");
}
我想完成两件事。首先,将映像缓存在RAM中的服务器上,这样就不必重新创建它。这就像一个魅力。其次,我希望浏览器在本地缓存它,这样就不必在请求之间重新加载。
当我在Chrome,FireFox或Opera中请求图片时,一切正常。 MVC发送以下标题:
Cache-Control: max-age=0
Chrome收到消息,并且在服务器响应304(未修改)响应的后续请求中不会请求该图像。
但是当我在IE中查询图像时,MVC由于某种原因发送了无缓存头:
Pragma: no-cache
毫不奇怪,IE会在每次后续页面加载时请求图像。当然,它已缓存在服务器上的RAM中,因此创建映像没有开销,但它确实消耗带宽将其发送到线路上。
为什么这种行为在MVC中是默认的?我认为MS会希望它在IE中表现更好,而不是更糟。