我们正在进行一个与静态资源相关的项目,为了使页面加载更快,我们大量使用浏览器缓存。现在我们面临的问题是每次更新静态内容(如css或js),用户会抱怨出现一些问题。我知道用户可以手动清除缓存并获取正确的内容。但是难道不可能在更新文件时,它自己加载新版本吗?我们使用的是带有WAMP的PHP。
expires
头 - 一天?一周?一个月?'cache-control: "no-cache, must-revalidate"'
和短的过期时间,则浏览器每次想要重新显示缓存对象时都会与服务器进行检查,使用"If-Modified-Since"
请求头发送您的服务器最初在其“Last-Modified”响应头中发送的上次时间戳。如果自客户端发送的时间戳以来已更新该对象,则服务器将发送新对象和新的Last-Modified
时间戳头。否则,它将只响应“304-未修改”的响应头。好的阅读资源:
强制用户重新加载静态资源的最快最简单的方法是在其后添加查询字符串参数,例如,如果您的脚本是
<script type="text/javascript" src="myscript.js"></script>
?v=2
即可。<script type="text/javascript" src="myscript.js?v=2"></script>
又更新了?
<script type="text/javascript" src="myscript.js?v=3"></script>
etc.
http://sstatic.net/stackoverflow/all.css?v=82a4a8691f11
- AgentConundrum你可以使用一个技巧来强制浏览器加载更新版本的css/js文件。
假设你的文件名为“layout.css”(或“common.js”),那么包含该文件的语法是
<link rel="stylesheet" href="/layout.css">
<link rel="stylesheet" href="/layout.css?version=1">
所以每次更改您的js / css文件时 - 添加一个与之前不同的查询字符串(我认为最好的方法是每次更改内容时递增版本号)。
您可以通过重命名静态文件或者添加时间戳来强制用户重新下载静态文件,例如:
<img src="logo.png?212312313"/>
每次更改时间戳,用户就会重新下载新文件。这可以通过检查文件修改时间或手动添加随机字符串(可能是版本号)来自动化服务器端。
.htaccess
设置标题,甚至可以通过在php文件中包装文件并在之前使用header(...)
发送缓存头来设置标题。 php手册中header条目的评论也很好地概述了如何设置与缓存相关的标题。 - poke