一尘不染

在链接和脚本标签中的CSS和Javascript URL后面附加“?v = 1”有什么作用?

html

我一直在查看HTML5样板模板,并注意到"?v=1"在引用CSS和Javascript文件时在URL中的使用。

  1. "?v=1"在链接和脚本标记中附加到CSS和Javascript URL有什么作用?
  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 -->

阅读 839

收藏
2020-05-10

共1个答案

一尘不染

这些通常是为了确保在网站更新为新版本时浏览器获得新版本,例如,在构建过程中,我们将具有以下内容:

/Resources/Combined.css?v=x.x.x.buildnumber

由于每次新代码推送都会改变这种情况,因此仅由于查询字符串,客户端就不得不获取新版本。例如,查看此页面(在回答此问题时):

<link ... href="http://sstatic.net/stackoverflow/all.css?v=c298c7f8233d">

我认为SO团队可以使用文件哈希来代替修订号,这是一种更好的方法,即使使用了新版本,浏览器也只在文件 实际 更改时才强制使用新版本。

这两种方法都允许您将缓存标头设置为非常长的时间(例如20年)…但是,当其更改时,您不必担心该缓存标头,浏览器会看到不同的查询字符串并将其视为不同的新文件。

2020-05-10