为什么开发人员在JavaScript文件的样式表链接中附加查询字符串?

use*_*274 17 javascript css

我在很多网站都看过这个:

<script src="/file.js?query=string"></script>

<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/stackoverflow/all.css?v=86c1a91ea87b">
<link rel="apple-touch-icon image_src" href="//cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png?v=fd7230a85918">
Run Code Online (Sandbox Code Playgroud)

为什么开发人员为这些脚本和样式表等传递查询字符串?

更新:我同意这是重复但你能告诉我如何"搜索"以获得这些原始问题吗?

Tha*_*you 26

这用于使缓存无效.

看看这个简短的(尽管是旧的)解释:http://css-tricks.com/update-on-css-caching/

更新查询字符串时,它会强制客户端的浏览器下载样式表或脚本的更新副本.

  • 请注意,某些浏览器在确定文件名是否不同时不考虑查询字符串。因此,更改实际文件的名称更安全。使用 [semver](http://semver.org/) 的好机会。或者,您可以在文件的基本名称后附加一个哈希值:`myscript.js` 变为 `myscript.2fc57a.js` (2认同)

Joe*_*nos 7

可以使用的一件事是通过更改查询字符串来强制浏览器重新提取脚本或样式表.这样,如果文件发生变化,并且网站想要强制任何用户拉出新的用户而不是使用缓存副本,他们只需更改查询字符串.

例如:

<script src="//whatever.com/something.js"></script>
Run Code Online (Sandbox Code Playgroud)

如果你的页面上有这个,那么浏览器会将其拉下一次,然后可能会将其缓存一段时间,因此每次加载页面时,除非他们有理由尝试重新拉取,否则他们将使用缓存副本(喜欢F5刷新页面).

如果您使用随机查询字符串,那么一旦您在标记中更改了查询字符串,浏览器就必须拉一个新的,因为浏览器认为它是一个新文件(无论它是否实际存在).并且内容服务器将忽略静态文件上的查询字符串参数,因此它不关心您放置的内容:

<script src="//whatever.com/something.js?v=12345"></script>
Run Code Online (Sandbox Code Playgroud)

无论是否需要,浏览器都会再次获取文件.

<script src="//whatever.com/something.js?v=98765"></script>
Run Code Online (Sandbox Code Playgroud)

现在它会再次这样做.