【问题标题】:How to not tell browser not to save cache如何不告诉浏览器不要保存缓存
【发布时间】:2016-10-07 22:01:55
【问题描述】:

我有一个 laravel 5.2 应用程序。每次我更新我的网站时,我的问题都会出现,我的所有客户都打电话给我,因为有些东西不工作,问题是因为一些 .js 和 .css 在缓存中,我必须向他们解释如何擦除缓存.

什么是最好的解决方案?,如何告诉浏览器不缓存我的 .js 或 .css(或其中一些,指定)的标签?。

谢谢

【问题讨论】:

  • 您可以在页面头部添加无缓存的元标记,也可以在托管服务器上关闭缓存,即 IIS
  • 一种解决方案是将查询字符串附加到您的包含中,例如<link rel="stylesheet" type="text/css" href="mystyle.css?2"> - 注意?2。这会强制刷新,但不会通过每次强制刷新来减慢加载时间,仅当版本较新时。每次对文件进行更改时,都可以增加末尾的数字。

标签: javascript html browser-cache cache-control


【解决方案1】:

您可以在将 JS 和 CSS 包含在 HTML 中时对其进行版本控制,方法是向标签添加版本,例如 <link rel="stylesheet" href="style.css?v=3.4.1">

当您对 CSS 或 JS 进行更改时,更改版本,任何访问该页面的人都会加载新版本,而不是依赖浏览器缓存。

如果您在 Laravel 中使用 elixir,则包含用于版本控制和缓存清除的选项https://laravel.com/docs/5.3/elixir#versioning-and-cache-busting

【讨论】:

    【解决方案2】:

    让浏览器不保存缓存的方法是每次用户访问网页时为源创建一个新版本。

    cache-buster 查询字符串可以更新,以便 浏览器无法识别缓存中的文件并下载新的 版本。

    我在cache boosting link 找到了很好的信息。

    如果您使用的是 apache,link 可能也很有帮助。

    【讨论】:

    • 始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。 How to Answer为链接提供上下文下对此进行了解释。
    【解决方案3】:

    在 laravel 中有一个样式表和脚本的版本控制。使用laravel-elixir可以找到here

    如果版本只有 css 样式表,那么你可以像这样使用:

    elixir(function(mix) {
        mix.version('css/all.css');
    });
    

    你会有这样的all-16d570a7.css

    如果你想要多个文件,比如 css 和 js:

    elixir(function(mix) {
        mix.version(['css/all.css', 'js/app.js']);
    });
    

    最后,要运行此版本,您只需在控制台中输入以下命令: gulp 或更具体的gulp version

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2011-02-11
      • 2012-01-11
      • 2010-11-25
      • 2020-01-27
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多