【问题标题】:caching not working when refresh browser刷新浏览器时缓存不起作用
【发布时间】:2011-05-05 01:23:38
【问题描述】:

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

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

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

【问题讨论】:

  • 服务器应检查If-Modified-Since 请求标头并在适当时发送304;你用的是什么服务器软件?

标签: java image caching browser refresh


【解决方案1】:

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

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

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

【讨论】:

  • 我试过萤火虫。并且看到当我按下应用程序的菜单按钮时,没有加载图像。如果我按刷新所有图像正在加载..我可以在请求中看到 If-modified-since。
【解决方案2】:

解决了这样的问题。

从 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 }

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2016-08-13
    • 2014-11-03
    • 2013-06-02
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多