我刚刚在网上搜索过但找不到合适的答案:
FF的Google页面速度扩展告诉我在我的网站上缓存文件(PHP)。因此,我更新了.htaccess
(在我的网站测试版区域),以便缓存某些类型的文件:
ExpiresActive On
ExpiresDefault A0
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
在beta区域进行编码时,我注意到由于缓存控制设置,我需要按 F5 来获取最新的.css文件。这对我来说并不坏......但用户呢?
因此,当我更新我的网站(或文件过期)时,我可以告诉浏览器重新下载所有文件(如果没有),并使用缓存吗?
如果我可以告诉浏览器,那将是完美的:“嘿,更新时间之前的所有文件都是旧的,请重新下载它们 - 但是更新时间之后的文件没问题,请使用缓存。”
答案 0 :(得分:6)
这是我有时使用的一种简单方法,它不需要任何复杂的配置。
每当修改css或javascript文件时,只需在标记中添加一个虚拟参数即可。我通常使用当前的日期和/或时间。例如:
<link type="text/css" rel="stylesheet" href="site.css?120911" />
这会强制浏览器在您需要更新文件时下载该文件的新副本,同时仍然允许您在幕后维护一致的文件名。
答案 1 :(得分:2)
出于性能原因,您已向浏览器表明它应该缓存文件,而不是在很长时间之前从服务器请求它。
这就是浏览器正在做的事情:使用缓存中的文件,而不是从服务器询问任何内容 - 这是正确的行为。
当您修改文件,强制浏览器重新申请并获得新版本时,您唯一的解决方案是更改其网址。
通常,这是通过在文件名中集成版本号来完成的:
http://www.yoursite.com/my-file-123.css
并且,当文件更新时:
http://www.yoursite.com/my-file-124.css
由于URL已更改,浏览器的缓存中没有该文件,并从服务器请求新版本。
当然,手工完成这件事并不容易,并且容易出错......
因此,通常(如果你有一个构建脚本,从源代码控制中提取你的网站的源代码,并将它们打包生产),你将把这个过程集成到你的网站中建筑脚本。