客户端缓存在css / js上

时间:2018-03-14 16:02:41

标签: php html css .htaccess caching

首先我应该说我花时间阅读本案例中的所有主题但没有成功,最近我遇到了我的网站上的客户端/浏览器缓存问题,它没有任何变化。服务器端缓存很好,但客户端工作很糟糕,我应该每次按 CTRL + F5 ,我不想这样,因为它对用户不好,我知道我可以在devTool时禁用缓存是开放的,但我不是在谈论用户而不仅仅是我自己。这也发生在桌面和移动设备上。在移动设备中,我应该去设置/隐私/清除缓存。

这是我的网站代码与缓存有关:

htaccess的:指定mod_expires

ExpiresByType text/css "access plus 1 month"

我从gzip中删除了css,但没有成功。也改1个月到1秒。

mod_gzip_item_include file .(html?|txt|css|js|php|pl)$

PHP标题:

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: no-cache");
header("Vary: Accept-Encoding");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

HTML meta:

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

如你所见,我尝试了所有可能的方式与烦人的缓存战斗,但没有成功。我知道我可以在versioncss的末尾添加js,但所有人都知道这是清除缓存的坏习惯:

  

从静态资源中删除查询字符串

     

资源与&#34;?&#34; URL中的某些代理缓存没有缓存   服务器。删除查询字符串并将参数编码为   以下资源的URL:

source

那么,在正确的方向上移除cssjs重缓存的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

尝试使用HTTP Etags。这将允许客户端推断是否需要从服务器重新加载资源。

答案 1 :(得分:0)

每次都有效:在文件末尾添加? + random stuff。例如:

<script src="path/to/file.css?8768316833"></script>

在PHP中,我相信这应该以这种方式完成(我多年没有编写任何PHP,但是这里有:)

<script src="path/to/file.css?<?php echo rand() ?>"></script>"

这将强制浏览器每次都下载文件的新副本。

答案 2 :(得分:0)

<?php $filename "path/to/file.css";  ?>
<script src="<?php echo $filename; ?>?ver=<?php echo filemtime($filename); ?>"> 

这将在浏览器中缓存,但是当您在文件中进行更改时,文件时间将更新,客户端将获得该文件的新副本。