【问题标题】:Clearing browser cache once file on server is deleted删除服务器上的文件后清除浏览器缓存
【发布时间】:2013-03-02 11:41:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: php browser-cache


    【解决方案1】:

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

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

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

    define('VERSION_NUMBER', '2.1')
    

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

    <img src="image.jpg?v=<?php echo VERSION_NUMBER;?>" />
    

    【讨论】:

    • 编辑文件名或添加版本号将需要对系统进行太多修改,我希望将其用作最后一个选项。不过感谢您的帮助。
    • @AkshatGoel 我编辑了我的答案。配置完成后,您只需更改一个常量即可切换到新版本。
    • 其实这些并不是我们(开发者)控制的图片。这些是用户管理的图像,每个用户都有大量这样的图像。其中任何一个都可能被删除并替换为新的这些也不是静态图像。这些是通过脚本使用 PHP 和 header 中的 content-type 标签生成的。
    • @AkshatGoel 您是否跟踪数据库中的图像?如果是这样,请使用图像 ID 作为版本号。或者使用最新上传的时间戳。或者在数据库中添加一个版本号。
    • 是的。那是我最后的选择。我现在要采用这种方法。我认为没有其他选择。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 2011-02-04
      • 1970-01-01
      • 2016-07-11
      • 2017-08-26
      • 1970-01-01
      • 2016-02-18
      相关资源
      最近更新 更多