使用缓存刷新页面

时间:2011-06-28 04:56:34

标签: javascript caching refresh

我正在尝试刷新页面,但是想要使用缓存并且无法弄清楚如何执行此操作。有两种情况:

  • 如果我点击URL栏并点击回车(或从其他地方访问该页面),它会从缓存中重新加载页面/图像。的 GREAT!

  • 如果我点击刷新按钮或使用Javascript刷新页面,它会再次抓取所有图像并永远占用。 不太好!

我尝试过:top.location.reload(false);top.location.reload(true);(我是在iFrame中发送的)并且都没有使用缓存。我正在避免使用location,因此它不会在浏览器历史记录中结束两次。

问题:如何使用缓存图像重新加载页面?是否有不同的javascript函数或这是mod_expires问题?

提前感谢您的帮助!

编辑:(来自Chrome:开发者工具的信息)

  • 导航到该页面时,我为所有图像获取“从缓存”
  • 刷新页面时,我会为所有图像获取“304 - Not Modified”(并且需要花时间下载每个图像)

编辑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

6 个答案:

答案 0 :(得分:5)

window.location.reload( false );的{​​{3}}表示它将从缓存中加载。如果没有发生这种情况,那么您可能会看到浏览器错误。看看你是否可以在另一个浏览器中复制问题。

编辑(对于您的编辑):您看到了这种行为,因为您将来没有设置过期标头。您需要documentation

答案 1 :(得分:1)

window.location.href = window.location.href;

如果地理位置包含#,请务必在设置href之前将其删除。

答案 2 :(得分:0)

如果您想在客户端启用缓存,请注意发送Expire标头,例如mod_expires

答案 3 :(得分:0)

使用this site,我只获得了location.refresh(true);的绿色图片。 location.refresh();location.refresh(false);我得到了红色图片。工作正常,我想。

答案 4 :(得分:0)

这里有两件事需要考虑:

1:请求...浏览器 - >服务器

2:响应...服务器 - >浏览器

当您刷新页面时,您无法绕过浏览器向服务器请求页面资源。

您可以做的是确保服务器发送最小响应。

实现此目标的最佳方法是在响应标头中使用etags。这样浏览器就会向服务器发送if-none-match请求,如果没有修改任何内容,则会收到304 Nothing changed响应。

答案 5 :(得分:0)

您的第二个请求是通过手动刷新页面启动的。执行此操作时,浏览器会向请求发送额外的cache-control:max-age=0标头。这是304(未修改)的来源。

如果您在站点内导航(使用链接),浏览器将继续使用其缓存。