我一直在查看HTML5样板模板,并注意到"?v=1"在引用CSS和Javascript文件时在URL中的使用。
"?v=1"
js/modernizr-1.5.min.js
来自他们的样本index.html:
index.html
<!-- CSS : implied media="all" --> <link rel="stylesheet" href="css/style.css?v=1"> <!-- For the less-enabled mobile browsers like Opera Mini --> <link rel="stylesheet" media="handheld" href="css/handheld.css?v=1"> <!-- All JavaScript at the bottom, except for Modernizr which enables HTML5 elements & feature detects --> <script src="js/modernizr-1.5.min.js"></script> <!------ Some lines removed ------> <script src="js/plugins.js?v=1"></script> <script src="js/script.js?v=1"></script> <!--[if lt IE 7 ]> <script src="js/dd_belatedpng.js?v=1"></script> <![endif]--> <!-- yui profiler and profileviewer - remove for production --> <script src="js/profiling/yahoo-profiling.min.js?v=1"></script> <script src="js/profiling/config.js?v=1"></script> <!-- end profiling code -->
这些通常是为了确保在网站更新为新版本时浏览器获得新版本,例如,在构建过程中,我们将具有以下内容:
/Resources/Combined.css?v=x.x.x.buildnumber
由于每次新代码推送都会改变这种情况,因此仅由于查询字符串,客户端就不得不获取新版本。例如,查看此页面(在回答此问题时):
<link ... href="http://sstatic.net/stackoverflow/all.css?v=c298c7f8233d">
我认为SO团队可以使用文件哈希来代替修订号,这是一种更好的方法,即使使用了新版本,浏览器也只在文件 实际 更改时才强制使用新版本。
这两种方法都允许您将缓存标头设置为非常长的时间(例如20年)…但是,当其更改时,您不必担心该缓存标头,浏览器会看到不同的查询字符串并将其视为不同的新文件。