我有一个自定义处理程序将图像返回到浏览器。
图像是从数据库中获取的。
由于某种原因,浏览器没有缓存图像,我想知道是否有人能够从下面的代码中发现我缺少的内容:
HttpContext.Current.Response.BinaryWrite(imageBytes);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
Context.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);
if(imgRepGetCache.DateCached.HasValue)
HttpContext.Current.Response.Cache.SetLastModified(imgRepGetCache.DateCached.Value);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(2));
HttpContext.Current.Response.ContentType = "image/jpeg";
或者,如果我以某种方式完全错过了这一点,并且还有其他地方我需要看。
编辑:根据要求获得更多信息:
- URL 始终相同
- 我正在测试通过标准 IIS 管道和我的管道在同一台 PC 上的同一浏览器中加载相同的文件。通常通过 IIS 加载的文件是缓存的,我的文件没有。
编辑 2:检查正常 IIS 路由上的 HTTP 请求/响应后,我认为它与 ETag 有关。ETag(我刚刚才刚接触)似乎是文档的一种校验和。在浏览器的后续请求中,发送 ETag,如果服务器发现 ETag 没有更改,则返回 304 - Not Modified。都好!但我现在使用以下方法设置 ETag:
HttpContext.Current.Response.Cache.SetETag(imgRepGetCache.DateCached.ToString());
但它没有出现在响应中。更近...
编辑 3:在利用 Firebug 获得一些 HTTP 检查乐趣后,我最终修复了它。我在下面发布了我的解决方案。