【发布时间】:2011-02-22 17:01:45
【问题描述】:
我有一个脚本,它通过使用几个查询字符串变量来提供一个图像。我还在 IIS 7.5 中使用 URL 重写。
所以图片有这样的 URL: http://mydomain/pictures/ajfhajkfhal/44/thumb.jpg 要么 http://mydomain/pictures/ajfhajkfhal/44.jpg
这被重写为: http://mydomain/Picture.aspx?group=ajfhajkfhal&id=44&thumb=thumb.jpg 要么 http://mydomain/Picture.aspx?group=ajfhajkfhal&id=44
我在 IIS 中添加了缓存规则,以便在请求 JPG 图像时对其进行缓存。这适用于我的图像,这些图像是磁盘上的真实图像。当通过脚本提供图像时,它们总是通过脚本请求,而不被缓存。
图像不会经常更改,因此如果缓存至少保留 30 分钟(或直到文件更改),那将是最好的。
我正在为我的网站使用 .NET/C# 4.0。我尝试在 C# 中设置几个缓存选项,但我似乎无法找到如何缓存这些图像(客户端),而我的静态图像被正确缓存。
编辑我使用以下选项在客户端缓存图像,其中“fileName”是图像的物理文件名(在磁盘上)。
context.Response.AddFileDependency(fileName);
context.Response.Cache.SetETagFromFileDependencies();
context.Response.Cache.SetLastModifiedFromFileDependencies();
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetExpires(DateTime.Now.AddTicks(600));
context.Response.Cache.SetMaxAge(new TimeSpan(0, 5, 0));
context.Response.Cache.SetSlidingExpiration(true);
context.Response.Cache.SetValidUntilExpires(true);
context.Response.ContentType = "image/jpg";
编辑 2 感谢您指出这一点,这确实是一个非常愚蠢的错误;)。我把它改成了从现在开始的 30 分钟(DateTime.Now.AddMinutes(30))。
但这并不能解决问题。我真的认为问题出在Firefox上。我使用 Firebug 来跟踪每个请求,不知何故,我认为我在做一些根本错误的事情。普通图像(缓存和静态)返回响应代码“304(未修改)”,而我的页面总是返回“200(OK)”。
【问题讨论】:
标签: c# .net asp.net iis-7 caching