我有一个系统,缓存最大年龄设置为0,但存在问题:当我在style.css文件中进行了一些更改时,更改不会出现在客户端上。浏览器将使用旧版本的缓存css文件。 我有一个简单的问题:将css文件命名为style.css?123会被缓存为新文件吗?
是的,向资源的URI添加唯一的查询字符串将强制客户端获取“新鲜”的版本(因为客户端不知道它只是先前缓存资源的更新)。这被称为指纹识别,通常使用CSS文件的时间戳或递增版本号1。
Google Web Fundamentals上有一篇关于HTTP缓存优化的好文章,特别是标题为“使缓存失效和更新缓存响应”的部分。
如何兼顾客户端缓存和快速更新?您可以更改资源的URL并强制用户在其内容更改时下载新响应。通常,您通过在文件名中嵌入文件的指纹或版本号来完成此操作,例如style.x234dff.css。
请注意,指纹不需要是连续的数字。只要冲突的风险有限,任何值-散列、版本等都可以。
1)这就是SO上所做的,例如:http://sstatic.net/js/global-login.js?v=12
你可以通过为 CSS 添加时间戳来欺骗浏览器,让它认为每秒都是一个新的样式表:
<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS \of F Y h:i:s A'); ?>" />
<link rel="stylesheet" type="text/css" href="style.css?Thursday 24th of April 2008 04:45:21 PM" />
摘自:我们能防止CSS缓存吗?
是的,在每个style.css
文件中添加一个查询字符串参数将强制它重新缓存。
因为浏览器会根据其URL缓存每个静态组件,所以当URL更改时,新文件将被缓存。
<FilesMatch "\.(css)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
想了解更多关于 .htaccess 文件的信息,请参考Apache .htaccess指南。