2010-07-28 249 views
2

我正在开发的一个Web应用程序使用大量异步加载的图像,这些图像随着时间的推移而经常修改,同时保留其URL。有几个问题是:操作浏览器缓存

  1. 如果我不提供在HTTP头明确禁用缓存的图像,用户经常会收到一个过时的镜像版本,但这样做大大增加了服务器的负载。
    如何从浏览器中取出缓存控件并手动评估是否应使用缓存的图像或从服务器重新加载它?由于有许多独立的图像需要加载,我还通过不同的主机名(即image01.example.com,image02.example.com,但所有这些主机名解析为相同的物理服务器)并行化图像下载。由于主机名的NN是随机生成的,因此我也可以从缓存未命中获取浏览器缓存中最新的图像。我是否应该放弃这种做法,并用其他方法取而代之?

  2. ,你会推荐什么缓存控制技术和进一步的阅读材料使用?

回答

2
  1. 要强制负载,废话参数添加到URL

    <img src='http://whatever/foo.png?x=random'> 
    

    其中 “随机” 会像一毫秒的时间戳。现在,如果你想要的是只有在图像被改变时重新加载图像,那么你必须确保你的服务器为图像设置了“Etag”值,并且它使用适当的过期和“如果自从修改后”头部。最终,除了HTTP标头以外,您无法以任何方式将缓存控件从浏览器中移除。代替生成NN随机的

  2. ,从图像名称的散列生成它。这样,相同的图像名称将始终映射到相同的主机名,并且您仍然可以在它们之间分布图像。

  3. 我没有一个很好的建议,但Web实现的建议是在互联网上丰富的,所以我会说与谷歌开始。

+0

(1),但不会有效地禁用缓存为这个形象?即如果我添加一个随机无意义参数并刷新页面,图像将不会从缓存中加载,因为显然这个参数会改变。此外,我还不清楚如何检查服务器上的图像是否已被修改,我们需要强制重新加载。 – dpq 2010-07-28 13:40:04

+0

这就是你问的,我想。我会添加到我的答案。 – Pointy 2010-07-28 13:53:30

+0

(1)只有在图像变化时才改变_random_无意义参数? – MrWhite 2010-07-28 14:12:33