将“?v = 1”附加到链接和脚本标记中的CSS和Javascript URL会做什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (237)

我一直在看HTML 5样板模板(从http://html5boilerplate.com/)并注意到使用"?v=1"在URL中引用CSS和Javascript文件。

  1. 附加什么"?v=1"到CSS和JavascriptURL的链接和脚本标签做什么?
  2. 并非所有Javascript URL都具有"?v=1"(示例如下:js/modernizr-1.5.min.js)。有什么原因吗?

从他们的样本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年……但是当它发生变化时,您不必担心缓存头,浏览器会看到不同的查询字符串,并将其作为一个不同的新文件处理。

用户回答回答于

这可以确保您从服务器获得CSS或js文件的最新版本。

然后你可以追加"?v=2"如果你有一个更新的版本"?v=3", "?v=4"诸若此类

请注意,您可以使用任何querystring,“v”不是必须的,例如:

"?blah=1“也会起作用的。

"?xyz=1002"会有用的。

这是一种常见的技术,因为浏览器现在越来越好地缓存js和CSS文件。

扫码关注云+社区

领取腾讯云代金券