php – 缓存css和javascript
发布时间:2020-12-13 17:38:51 所属栏目:PHP教程 来源:网络整理
导读:我在缓存方面遇到麻烦…… 我使用这个php文件与url重写压缩和缓存css和js 我的印象是,如果我更改/更新了我的一个文件,浏览器将检索更新的文件.但除非我清除缓存或刷新页面,否则它不会. 我的编码错了吗?或者,在缓存过期期限到期之前,浏览器是否不想更新内容
我在缓存方面遇到麻烦……
我使用这个php文件与url重写压缩和缓存css和js 我的印象是,如果我更改/更新了我的一个文件,浏览器将检索更新的文件.但除非我清除缓存或刷新页面,否则它不会. 我的编码错了吗?或者,在缓存过期期限到期之前,浏览器是否不想更新内容? <?php $file = $_SERVER['DOCUMENT_ROOT'].'/'.$_GET['file']; $last_modified_time = filemtime($file); $etag = md5_file($file); $expires = 60*60*24*7; if(file_exists($file)) { if($_SERVER['HTTP_IF_NONE_MATCH'] != $etag) { header("Pragma: public"); header("Cache-Control: maxage=$expires,must-revalidate"); header('Expires: ' . gmdate('D,d M Y H:i:s',time()+$expires) . ' GMT'); header("Last-Modified: ".gmdate("D,d M Y H:i:s",$last_modified_time)." GMT"); header("Etag: "{$etag}""); if($_GET['type'] == 'js') header('Content-type: application/javascript'); if($_GET['type'] == 'css') header('Content-type: text/css'); if($_GET['type'] == 'ico') header('Content-type: image/x-icon'); ob_start("ob_gzhandler"); include($file); } else { header('HTTP/1.0 304 Not Modified'); } } else { header("HTTP/1.0 404 Not Found"); } ?> 重写规则 RewriteRule ^(.*).js$/compress.php?file=$1.js&type=js [L,QSA] RewriteRule ^(.*).css$/compress.php?file=$1.css&type=css [L,QSA] RewriteRule ^(.*).ico$/compress.php?file=$1.ico&type=ico [L,QSA] ——— 编辑:也许我应该以不同的方式做这件事?大公司用什么来缓存,以及它们如何在缓存设置为过期之前强制浏览器获取更新的内容? 编辑2:谢谢你的帮助.我要用1小时的缓存 解决方法
在给定的Expires标头过期之前,浏览器不会刷新缓存的文件.如果它已过期,它将使用If-None-Match标头请求该文件(我猜).
但是你为什么不通过.htaccess处理缓存控制?你可以检查 # Expires-Header ExpiresActive On ExpiresByType application/javascript "access plus 7 days" ExpiresByType text/css "access plus 7 days" # ETag FileETag All Gzip压缩以及 AddOutputFilterByType DEFLATE text/css application/javascript 编辑:’大公司’不使用Expires或max-age标头,或者他们会设置这些标头让缓存文件约1小时 – >与缓存的冲突将被最小化.你将它设置为1周. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |