刷新浏览器时缓存不起作用

时间:2010-11-04 13:00:51

标签: java image caching browser refresh

我通过读取BLOB然后使用BufferedOutputStream进行流式传输来使用图像缓存。我设置了以下标题:

res.setHeader("Last-Modified", modDate);
res.setHeader("Expires", expTime.toString());
res.setHeader("Cache-Control", "public, max-age=31536000");

除了刷新按钮外,缓存总是有效。如果我们使用菜单加载页面,则单击图像从缓存加载但如果我们单击浏览器的刷新按钮它来自服务器。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不同的浏览器以不同的方式处理刷新按钮。

您可能想查看this answer。另外,查看发送到服务器的请求的标头。查看浏览器是否正在发送If-modified-since标头。

实际上,您可能会检查该问题的所有答案。例如,如果您使用的是Firefox并且最初执行了Ctrl-(刷新),那么在浏览器关闭之前,Firefox不会再次缓存它。

答案 1 :(得分:0)

修正了这样的问题。

从req.getHeader获取日期(“If-Modified-Since”); 并比较if-modified-since日期和数据库中的日期。如果它们相同则返回304状态。然后它将不会被修改。

String modifiedSince = req.getHeader("If-Modified-Since");
    if(formattedLastAccess.equalsIgnoreCase(modifiedSince)){
        res.setStatus(304);
    }else {  // stream file }