阻止缓存CSS文件


Preventing Caching of CSS Files

我正在使用PHP开发一个简单的网站。

开发配置:WAMP

生产配置:LAMP

在测试时,我更改了CSS文件,但当我重新加载页面时,我的浏览器(不确定)仍然使用旧的缓存CSS。

我做了一些谷歌搜索,发现了不同的解决方案,我已经尝试过

  • 在css css/main.css?78923末尾追加查询
  • 使用Ctrl + R(在Firefox中)强制获取资源
  • 禁用Firefox缓存以及使用Clear Cache Firefox插件

当这些都不起作用时,我在谷歌上做了更多的搜索,在那里我看到了一个堆栈页面(这里),有人建议Apache缓存资源。所以,问题不在于Firefox,而在于服务器。这家伙还提出了一个我不理解的解决方案(我是一个新手)

我的问题有两部分:

  1. Apache缓存资源是真的吗?(我该如何检查我的是否有?)
  2. 如何防止缓存

PS:复制和粘贴堆栈问题中的解决方案(我上面作为链接的解决方案)不起作用:(

我已经遇到这个问题好几次了,通常在生产站点上通过像这样调用我的css来解决这个问题

<link rel="stylesheet" type="text/css" href="style.css?v=1" />

当您推出更新时,只需将v=1更改为v=2,它将强制所有用户浏览器获取新的样式表。这也适用于脚本文件。如果您在Google上查看源代码,您会注意到他们也使用这种方法。

我的LAMP开发系统曾经遇到过同样的问题,这是由网络装载引起的。我设法通过在我的apacheconf.中添加这两行来消除它

EnableMMAP off
EnableSendfile off

在我的php页面中,我通常会将当前日期时间添加到css href:的末尾

<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS 'of F Y h:i:s A'); ?>" />

参考:此处

我知道这是一个老问题,但我刚刚遇到了这个问题,也遇到了一些同样的问题。这里有一个不在任何文件上保留缓存的快速方法:

<link rel="stylesheet" href="css/style.css?<?=time()?>">

每次加载页面时,使用有助于获取最新版本。

  1. Apache(-modules)可以缓存资源,但这不是您当前的问题
  2. 要么禁用你的浏览器缓存,在重新加载时刷新缓存,要么用修改后的标题交付css。您可以编写一个设置过期标头的脚本,这样您的浏览器就必须获得css的新版本

无论如何,我不明白这一点。对于开发来说,只需禁用浏览器缓存或按Ctrl+r就更容易了。

当更改资产文件(js、css等)中的某些内容时,我总是使用httcacheclean

我想建议一些类似的东西:

<link rel="stylesheet" href="css/style.css?v=<?=filemtime('css/style.css')?>">

实际上,filemtime()函数返回文件修改时间。因此,如果仅更改文件,则值将不同。否则,该值将保持不变。

因此,这个函数可以帮助我们防止文件的缓存被更改,并且如果文件没有更改,也可以鼓励缓存,因为它将返回相同的值。

如果filemtime()值没有更改,浏览器将使用缓存的CSS。