CSS链接中的'?'是用来做什么的?

46

我正在浏览我的最爱网站的HTML代码...啊哈...然后我在标记中看到了这个:

<link href="/Content/all.min.css?d=20090107" rel="stylesheet" type="text/css" />

"?d=20090107" 是什么意思?我猜是某种日期,但不确定它为什么出现在文件路径中。有什么想法吗?


@James Burgess:一点点谷歌递归。=) - Jronny
3个回答

70

这里添加一些唯一性以使文件名不同,当他们更改CSS文件时,可以更改额外的内容以确保每个客户端重新加载CSS而不是使用缓存的版本。

Web服务器会忽略参数并正常提供/Content/all.min.css

注意:虽然CSS可能是动态生成的,但这是确保重新加载的常见习惯用法,并且由于参数是日期,所以这似乎很有可能。


编辑:Podcast 38提到了这个...

自从推出以来,我们一直在使用过期或Cache-Control标题。这样可以节省浏览器获取不经常更改的项目(例如图像、JavaScript或CSS)的通信往返时间。缺点是,当您实际更改这些文件时,必须记住更改文件名。我们的构建过程的一部分现在使用“标记”为这些文件打上版本号,因此我们不再需要手动执行此操作。


多么聪明啊。这意味着我们总是欺骗浏览器文件已经被更改了! - xingyue

12
每次更新样式时都要“清除缓存”。我猜测负责这些样式的人每次更改时都会增加版本号。因为浏览器在样式字段中看到一个不同的URL,所以它会获取最新版本,即使它在服务器上实际上是相同的位置。
正如评论中指出的那样,CSS文件经常将其到期设置得很久远,这种方法是绕过与缓存相关的标头的好方法。
相当有用的技巧。

2
是的,服务器将为CSS文件设置一个过期头,以防止不必要的请求,这些请求只会返回未修改的响应。因此,当文件实际上发生变化时,服务器需要调整文件名以防止浏览器缓存命中。 - CurtainDog

4

通过让浏览器认为每次刷新都是一个新文件,从而使其刷新缓存。

当您的样式表经常更改时非常有用...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接