littleboy1982
b0r0j021
2009-10-10 20:00

如何获取浏览器缓存里的URL资源的最后修改时间?

  • javascript

我用ajax请求资源 /xxx/a.html的数据

[list]
[*]a.html页面保存了很大量的数据,所以想用缓存,不重新加载。
[*]但a.html又经常被修改,修改后必须重新请求新的数据。
[/list]

所以加上.setRequestHeader("If-Modified-Since",日期)来告诉服务器上次加载过的该文件的时间,使其在修改后重新加载。

[color=red]但是如何通过js获取该资源留在缓存中的上次修改时间是关键!请大虾们指点![/color]
[b]问题补充:[/b]
回1F:
这种处理方式我觉得有点问题,但如果你已经加载过一次a.html,把浏览器关了,再重新访问的时候,就算原资源没有改,但不得不再加载一次,因为浏览器里已经没有那个值了,这个值只有缓存里有(我这个文件挺大的,所以比较吝惜请求次数了)。

回2F:
后面您说的方法:在客户端请求的时候,若认为资源已经修改了,主动在路径后面加(变)参数让服务器得知我请求的是新的资源。我觉得这确实能得到新的数据,但是逻辑上有点问题。(是不是我理解的问题)

客户端在请求的时候,通过js访问远程a.html的时候,是无法知道将要请求的资源对象是否刚修改过了。我怎么能知道什么时候加(变)这样的参数呢。(这个资源是静态资源)。

Last-Modified 是服务器发送HTTP响应的时候组装到包内的。但请求的时候浏览器通常会自动给请求包上打上If-Modified-Since时间戳。但是我测试过程中发现,通过ajax动态请求资源的时候,IE默认使用浏览器缓存,根本就不发数据包,加上 request的If-Modified-Since属性后,会发数据包了,但是这个时间应该设为缓存中最后的修改时间。如何获得不得而知了。

多谢您的积极解答,祝愉快。
[b]问题补充:[/b]
多谢,JQuery有个lastmodified[url],就是没有看出来怎么实现的,没看懂。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

4条回答