3

我在用户的浏览器上缓存图像以避免重复的网络请求。但是,有时这些图像会从服务器中删除,新的图像会以相同的名称取代它们。

我想将这些新图像提供给用户,但不知道如何告诉浏览器这样做。它没有发送任何请求(显然,这就是缓存的用途)。

谷歌结果显示无法完成。是这样吗?

4

2 回答 2

3

如果文件缓存在浏览器中,则不会被请求。所以你不能发送任何指令来刷新它。但是你可以:

  • 更改文件名
  • 添加版本号imag.jpg?v=5
  • 如果您的图像要经常更改,请使用较短的到期时间

我个人使用第二个选项。在应用程序配置文件中定义版本号。然后可以在更改设计时更改版本号,所有图像/css/js 都会刷新。

define('VERSION_NUMBER', '2.1')

然后在您的视图中使用定义:

<img src="image.jpg?v=<?php echo VERSION_NUMBER;?>" />
于 2013-03-02T11:47:18.580 回答
0

有很多复杂的方法可以使用 HTTP 控制缓存。一般机制是您告诉浏览器在指定的到期日期后重新检查图像。浏览器不会请求整个图像,而是发送诸如 之类的标头If-Modified-Since,服务器可以响应304 Not Modified或发送新图像。

具体如何执行此操作将取决于您提供图像的方式。如果您只是使用 Apache 从文件系统为它们提供服务,请查看该mod_expires模块。

如果您搜索“HTTP 缓存”,您应该会发现许多不同的技术。您不能做的一件事是主动告诉浏览器在服务器上修改某些内容时取消缓存,因为您只能响应浏览器发出的请求。

于 2013-03-02T14:01:46.030 回答