Javascript 使用缓存刷新页面

Javascript 使用缓存刷新页面,javascript,caching,refresh,Javascript,Caching,Refresh,我正在尝试刷新页面,但希望使用缓存,但不知道如何执行此操作。有两种情况: 如果我在URL栏中单击并按enter键(或从其他地方访问页面),它将从缓存中重新加载页面/图像浏览器 刷新页面时,无法绕过浏览器向服务器请求页面资源 您可以做的是确保服务器发送最小的响应 实现这一点的最佳方法是在响应头中使用。这样,如果没有匹配的请求,浏览器将向服务器发送一个,如果没有修改任何内容,则返回一个304未更改的响应。您的第二个请求是通过手动刷新页面启动的。执行此操作时,浏览器会随请求发送一个附加的缓存控件:m

我正在尝试刷新页面,但希望使用缓存,但不知道如何执行此操作。有两种情况:

  • 如果我在URL栏中单击并按enter键(或从其他地方访问页面),它将从缓存中重新加载页面/图像<太棒了

  • 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
    
  • 如果我点击刷新按钮或使用Javascript刷新页面,它会再次抓取所有图像,并花费很长时间<不是很好

  • 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
    
我试过:
top.location.reload(false)
top.location.reload(真)(我在iFrame中发送此消息),但两人都没有使用缓存。我避免使用
location
,这样它就不会在浏览器历史记录中出现两次

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

提前谢谢你的帮助

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

  • 当导航到该页面时,我会为所有图像获取“来自缓存”
  • 刷新页面时,所有图像都会显示“304-未修改”(下载每个图像都需要时间)
编辑2:(来自图像的标题,safari:developer tools)

Javascript:top.location.reload(false);(无缓存!)

导航到页面:(使用缓存)


如果要在客户端中启用缓存,请注意发送
Expire
头,例如使用for
窗口。location.reload(false)表示它将从缓存加载。如果这种情况没有发生,那么您可能会看到一个浏览器错误。查看是否可以在其他浏览器中复制此问题


编辑(用于编辑):您正在看到这种行为,因为您将来没有设置Expires头。你需要这样做

使用,我只得到了带有
位置的绿色图像。刷新(true)。使用
location.refresh()
位置。刷新(false)我得到了红色图像。工作OK,我猜。

这里有两件事要考虑:

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

2:回应。。。服务器->浏览器

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

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


实现这一点的最佳方法是在响应头中使用。这样,如果没有匹配的
请求,浏览器将向服务器发送一个
,如果没有修改任何内容,则返回一个
304未更改的
响应。

您的第二个请求是通过手动刷新页面启动的。执行此操作时,浏览器会随请求发送一个附加的
缓存控件:max age=0
头。这就是304(未修改)的来源

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

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

如果该位置包含一个
#
,请确保在设置
href

之前将其删除,也许我没有掌握这一点,但是如果要保留缓存,“刷新”有什么意义?它可以是a)服务器过期和/或b)客户端过期(无缓存或小缓存)不要忘记c)一些随机添加到URL的值,因为您想将图像保留在缓存之外,但忘记了它。下载firebug,单击NET选项卡并查看headers@Brad-具体而言,它用于媒体缩略图页面。在AJAXed iFrame中上载新图像后,我想刷新页面。。。但每次我这样做时,它都会重新加载页面上的所有图像,而不是从服务器加载。从技术上讲,它应该只需要加载新上传的图像。@cbh:这是另一个问题!您希望将图像缓存在client@mplungjan-谢谢,这不是客户端过期问题,因为在我点击刷新按钮之前,它对(整个)页面使用缓存没有问题。文件名后没有查询字符串或任何内容。。。至于服务器过期,那么这会是一个htaccess修复吗?@Raven-Haha,我看到红色是不是很糟糕。。。然后点击刷新,图像就被破坏了?如果我移动刷新或再次导航到那里,我会看到它是绿色的。。。但所有的点心都坏了。(我清除了缓存)@SpliFF-谢谢,我添加了一个htaccess文件,其中包含以下内容:
ExpiresActive On ExpiresByType image/jpg“修改加5年”
(我所有的缩略图都是jpg),同样的问题仍然存在。刷新时仍将显示“304-未修改”。有什么想法吗?使用
access+5年
。使用
修改
需要不断询问服务器资源是否被修改(因此是304响应)@SpliFF-我已将其切换到
访问
,问题仍然存在,返回的状态相同。是否点击刷新按钮会迫使浏览器不使用缓存?是的,没错。物理地点击刷新按钮总是发送
缓存控制:no Cache
@SpliFF-好的,回到最初的问题,为什么
no Cache
刷新我的javascript?这可能是由于来自iFrame的请求造成的吗?我在htaccess文件中设置了
expire
(请参阅文章中的标题),问题仍然存在。有什么想法吗?我的标题中似乎有ETag(参见文章中的编辑),并且在javascript刷新时,
304未修改。但是页面仍然需要时间来加载所有图像(不像导航到页面时那样从缓存加载)。有什么想法吗?这些图像有ETag吗?您需要在所有不希望再次加载的资产上设置ETag