【发布时间】:2011-09-24 00:13:41
【问题描述】:
我正在尝试刷新页面,但想使用缓存并且不知道如何执行此操作。有两种情况:
如果我在 URL 栏中单击并按 Enter(或从其他地方访问该页面),它会从缓存中重新加载页面/图像。 太棒了!
如果我单击刷新按钮或使用 Javascript 刷新页面,它会再次抓取所有图像并永久保存。 不好!
我已经尝试过:top.location.reload(false); 和 top.location.reload(true);(我是从 iFrame 中发送的)并且都没有使用缓存。我避免使用location,所以它不会出现在浏览器历史记录中两次。
问题:如何使用缓存的图像重新加载页面?是否有不同的 javascript 函数或者这是 mod_expires 问题?
提前感谢您的帮助!
编辑:(来自 chrome 的信息:开发者工具)
- 导航到页面时,我会为所有图像获取“来自缓存”
- 刷新页面时,我得到所有图像的“304 - 未修改”(并且下载每个图像都需要时间)
编辑 2:(来自图像的标题,safari:开发者工具)
Javascript:top.location.reload(false); (没有缓存!)
Status Code:304 Not Modified
Request Headers
Cache-Control:max-age=0
If-Modified-Since:Tue, 28 Jun 2011 07:13:17 GMT
If-None-Match:"104684ae-a7d-66e41d40"
Referer:http://getdirectus.com/dev/media.php
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
Response Headers
Cache-Control:max-age=157680000
Connection:Keep-Alive
Date:Tue, 28 Jun 2011 16:56:50 GMT
Etag:"104684ae-a7d-66e41d40"
Expires:Sun, 26 Jun 2016 16:56:50 GMT
Keep-Alive:timeout=5, max=94
Server:Apache/2.0.54
导航到页面:(使用缓存)
Status Code:200 OK
Response Headers**
Accept-Ranges:bytes
Cache-Control:max-age=157680000
Connection:Keep-Alive
Content-Length:2685
Content-Type:image/jpeg
Date:Tue, 28 Jun 2011 16:54:20 GMT
Etag:"104684ae-a7d-66e41d40"
Expires:Sun, 26 Jun 2016 16:54:20 GMT
Keep-Alive:timeout=5, max=99
Last-Modified:Tue, 28 Jun 2011 07:13:17 GMT
Server:Apache/2.0.54
【问题讨论】:
-
也许我没有理解这一点,但是如果你想保留缓存,那么“刷新”有什么意义呢?
-
它可以是 a) 服务器过期和/或 b) 客户端过期(无缓存或小缓存)不要忘记 c) 一些随机值添加到 URL,因为您希望将图像排除在外缓存但忘记了。下载 firebug,点击 NET 标签并查看标题
-
@Brad - 具体来说,它用于媒体缩略图页面。在 AJAXed iFrame 中上传新图像后,我想刷新页面......但每次我这样做时都会重新加载页面上的所有图像,而不是从服务器。从技术上讲,它应该只必须加载新上传的图片。
-
@cbh:这是一个不同的问题!你想在客户端缓存图片
-
@mplungjan - 谢谢,这不是客户端过期问题,因为在我点击刷新按钮之前,使用(整个)页面的缓存没有问题。文件名之后没有查询字符串或任何内容......至于服务器到期,这将是一个 htaccess 修复吗?
标签: javascript caching refresh