我正在缓存静态资源。通常,当脚本或样式发生更改时,它会给人们带来一段时间的问题,直到他们的浏览器决定是时候使我们的文件缓存无效了。
我希望通过在所有脚本和样式标签的末尾插入一个值来强制浏览器向服务器发送实际请求来解决这个问题。这个值应该在多个服务器之间保持不变,直到发出命令来更改它。如何跨多个服务器生成/更改此值?
我正在缓存静态资源。通常,当脚本或样式发生更改时,它会给人们带来一段时间的问题,直到他们的浏览器决定是时候使我们的文件缓存无效了。
我希望通过在所有脚本和样式标签的末尾插入一个值来强制浏览器向服务器发送实际请求来解决这个问题。这个值应该在多个服务器之间保持不变,直到发出命令来更改它。如何跨多个服务器生成/更改此值?
您可以通过查询字符串或文件名更改来修改静态资源。任何一种方法都应在客户端上刷新。
1. querystring revving - 对“style.css”的引用变为“style.css?v=1.0”
2. 文件名 revving - 对“style.css”的引用变为“style-1.0.css”(还必须在您的服务器上重命名或创建文件“style-1.0.css”)
我已经使用了这两种方法,查询字符串可能更常见,因为您不必重命名服务器上的文件。
但是,这篇文章 Revving Filenames: don't use querystring给出了使用文件名 revving 的充分理由
为查询字符串 revving 实现此功能的一种方法是将版本号存储在 web.config 应用程序设置中
<appSettings>
<add key="staticResourceVersion" value="1.1"/>
...
</appSettings>
然后创建一些实用方法(或ConfigurationManager.AppSettings
直接调用)以使用内联进行静态资源标记,例如:
<link rel="stylesheet" type="text/css"
href="/css/style.css?v=<%=Utilities.GetStaticResourceVersion() %>" />
<script type="text/javascript"
src="/js/script.js?v=<%=Utilities.GetStaticResourceVersion() %>"></script>