使用?version=XXX刷新缓存中的CSS文件
Refresh CSS file in cache with ?version=XXX
为了刷新缓存中的CSS文件,我经常使用file. CSS ?version = DDMMYYYY技巧。但是,我对这种方法有一个疑问。
我在一个旧的外联网上工作。所有页面都使用相同的CSS文件。外部网没有任何模板文件,这个css包含在外部网的每个页面中。我需要为所有外部网页面刷新这个css文件。
我的问题是:我想使用file。css?登录页面上的version=DDMMYYYY技巧。其他页面仍然包含file.css(不包含?version部分)
如果用户进入登录页面,他将收到新版本的css文件。但是在其他页面上使用哪个版本呢?是旧版本(file.css)还是新版本(file.css?version=DDMMYYYY) ?
换句话说,当用户进入登录页面时,哪些文件将在他的缓存中:
- file.css和file.css?version = DDMMYYYY
- 只有file.css,更新到新版本
我很抱歉提出这个初学者的问题,但我自己测试起来有些困难。
谢谢你的帮助!
当文件被缓存时,它将包含完整的url,包括?
和它之后的东西。缓存头由服务器提供,并由浏览器执行。
file.css吗?version = DDMMYYYY
和
file.css
是两个独立的浏览器文件,没有任何连接。
我给你的建议是在所有页面上一致使用新url
这将不起作用,它们将被不同地缓存,尽管file.css
和file.css?version=DDMMYYYY
在文件系统中是相同的文件,但它们是不同的uri,服务器响应可能完全不同…因此,file.css
可以从缓存中加载旧文件,同时您可以使用file.css?version=DDMMYYYY
获得正确的文件。
防止这种情况的一种方法是完全禁用缓存,这会导致css文件在每次加载页面时下载,但会给你即时更新,或者你可以设置缓存在短时间内过期,如10分钟,2小时,所以它将每10分钟/2小时下载一次…
如果你使用的apache是htaccess,你可以这样做来禁用缓存:
<filesMatch ".(html|htm|js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
在我的项目中,我也使用?version方法来强制浏览器获得新版本的CSS文件。我建议使用filemtime()代替?version=DDMMYYYY。
的例子:
<link rel="stylesheet" href="css/custom.css?<?php=filemtime('css/custom.css')?>" type="text/css" media="screen" />
函数filemtime()获取文件修改时间,这样当CSS文件被更改时浏览器将获得新版本的CSS。如果文件没有更改,则时间保持不变,浏览器使用文件的缓存版本。
- 如何修复:当javascript更改DOM时,iOS会删除CSS文件
- 使用Javascript读取CSS文件并动态更改页面
- js和css文件-在publichtml外部或内部
- Google PageSpeed Insights与多个CSS文件
- Javascript:动态更改CSS文件+Cookie
- 没有在django项目中加载CSS文件
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- Chrome审核:在外部CSS文件之间的头中发现了1个内联脚本块&”;
- 使用新的 CSS 文件覆盖当前网站
- 多余的JS和CSS文件
- 快递.js无法获取我的 CSS 文件
- 无法查找元素'手动加载CSS文件时的CSS属性
- jquery移动应用程序无法使用jquryMobile框架JS和css文件的相对路径
- 不同的引导 CSS 文件
- 加载CSS文件并覆盖上一个文件
- 使用 JavaScript 动态加载 CSS 文件
- 如何使用谷歌页面速度CSS加载脚本延迟多个CSS文件
- 在 html 文件中包含无缓存元标记是否也会阻止缓存该 html 文件中链接的 js 和 css 文件
- Spring MVC 集成 js 和 css 文件
- 如何将 JavaScript 和 CSS 文件添加到 MagentoModule