如果您查看 Stackoverflow.com 的源代码,您会看到对他们的 css 文件的引用是:
<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />
这是如何完成的,以便他们可以通过查询字符串传递版本并提供正确的 CSS 文件?
如果您查看 Stackoverflow.com 的源代码,您会看到对他们的 css 文件的引用是:
<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />
这是如何完成的,以便他们可以通过查询字符串传递版本并提供正确的 CSS 文件?
这篇文章(PHP/.htaccess 示例)解释了它背后的想法。基本上,您可以将上次修改文件的时间戳附加到文件名,但仍提供原始文件。这样每次保存新版本的 CSS 文件时,文件名都会改变,这将迫使浏览器下载新版本。这适用于多种文件,包括 CSS 和 JS 文件。(使用文件名的替代方法是使用查询字符串。)
一个 ASP.NET 示例是这样的:
public static string GetBreaker(string fileName)
{
string cacheBreaker = null;
try
{
if (fileName.StartsWith("~"))
{
fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName.Remove(0));
}
cacheBreaker = File.GetLastWriteTime(fileName).ToFileTime().ToString();
}
catch { }
return string.IsNullOrEmpty(cacheBreaker) ? string.Empty : string.Format("?cachebreaker={0}", cacheBreaker);
}
您以这种方式在 MasterPage 中调用此方法:
<link href="<%= this.ResolveClientUrl("~/CSS/style.css") %><%=CacheBreaker.GetBreaker("~/CSS/style.css") %>"
rel="stylesheet" type="text/css" />
这样您的浏览器就不会缓存 css 文件。并且使用版本号很方便,因为 css 文件可能在每个版本中都发生了变化。
这不是调用正确 css 文件的方法。该文件始终是相同的,但版本号使您的浏览器不以为然并再次获取它。
如果您想知道它是如何完成的,他们在之前的博客文章中简短地提到了它:它是由他们的构建过程自动完成的。请参阅此博客文章(第 3 个要点)。
不幸的是,没有详细信息,但也许您可以通过评论该博客文章或联系 stackoverflow 团队获得更多信息。
每次更改文件时更改文件名以达到相同的效果可能会更容易。
file001.css
file002.css
我有一种感觉,保持文件名相同并附加?ver=1234
是为了使源代码控制更容易。