【发布时间】:2011-05-14 23:53:33
【问题描述】:
你好,我有个小问题
我上传了我的网站的新版本。 一些用户抱怨他们看到我更改的某些页面非常非常错误。
无论如何,刷新后他们都觉得很好。
我认为这是因为我的 css 文件在较早的时候被他们缓存了... 为什么第一次加载时浏览器不自己下载css文件?..
他应该知道css文件改变了不是他吗?
提前致谢
【问题讨论】:
你好,我有个小问题
我上传了我的网站的新版本。 一些用户抱怨他们看到我更改的某些页面非常非常错误。
无论如何,刷新后他们都觉得很好。
我认为这是因为我的 css 文件在较早的时候被他们缓存了... 为什么第一次加载时浏览器不自己下载css文件?..
他应该知道css文件改变了不是他吗?
提前致谢
【问题讨论】:
@UpTheCreek 的方法可以正常工作。但是你可以通过只更改调用而不更改文件名来节省一些麻烦。
screen.css?v=12
这也会强制重新加载,但只需要您更改调用。
【讨论】:
他应该知道css文件改变了 他不是吗?
不一定。如果您的 css 文件是从服务器发送的带有 max-age 指令和/或过期日期在很远的将来,则指示浏览器不要对您的资源发出条件请求(请参阅http://developer.yahoo.com/blogs/ydn/posts/2007/05/high_performanc_2/),以便他们考虑资源缓存仍然有效。
在这种情况下,为了强制执行新请求,您可能需要重命名文件或附加随机查询字符串,例如 file.css?848372034,或者更好的是,添加版本注释,例如 file.css?v=1
【讨论】:
如果您安装了 Web 开发人员工具栏(用于 Firefox 或 IE),您可以禁用缓存。我在开发网站时使用它。它使您不必在每次进行次要编辑时重命名 CSS。
【讨论】:
如果您使用的是 Apache,请尝试将其添加到您的根 .htaccess 中:
<FilesMatch ".(css|jpg|gif|ico|jpeg|png|html)$">
ExpiresActive On
Header set Expires "Mon, 22 Nov 2010 06:00:00 GMT"
</FilesMatch> [L]
只包括你不想缓存的文件类型,例如:
<FilesMatch ".(css|js)$">
如果您知道何时要更改文件,请设置一个未来日期 - 如果不定期刷新这些文件,您的网站会更快。
如果您不设置过期日期,浏览器会按其使用期限缓存这些文件。
【讨论】: