整个解决方案中的HTTP响应标头(缓存清除)

时间:2014-05-12 23:09:49

标签: c# html css asp.net caching

我有一大堆aspx页面的解决方案。我们还在CSS / js文件相对定期更改的环境中工作(远比我的开发团队更常见,我更喜欢)。当我们进行这些CSS / js更改时,这会给我们的用户带来问题,因为我们的用户最终会遇到缓存冲突。我们通常会指示他们清除缓存并解决所有问题,但我们很快就不必告诉他们清除缓存。

所以我从我在这里看到的帖子中使用了HTML Response Headers,以便让用户清除他们的缓存:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

这似乎工作正常。我还想过在js文件上使用querystring参数来强制刷新:

<script src="../js/jquery-1.4.2.min.js?v=1" type="text/javascript"></script>

这可能有助于我们的js / css缓存问题,但我不相信这是唯一被缓存的页面内容(从而在主要版本中抛出错误)。

一旦我确信使用HTML Response Headers正在实现其目标,我也计划应用到期日。

所以问题是:我是否必须在我们的解决方案中为每个aspx添加此(作为Response标头)?我可以将它加载到父框架中并让子iframe“继承”缓存清除吗?如果不是这样,我可以将其放入母版页面并让内容页面从母版页面接收这些标题吗?任何见解都会很棒。

1 个答案:

答案 0 :(得分:0)

如果你正在使用母版页,那么在那里设置标题就足够了。

更广泛地说,这是我们处理这种情况的方式:

  1. 我们使用Cruise Control生成包含版本的文本文件 每个版本的ID(例如&#34; 2014-05-13.001&#34;)
  2. 在.net中,我们使用StreamReader来获取当前的buildId和store 它在Application对象中
  3. 我们将id作为查询字符串参数附加到我们所有的CSS和JS文件引用中。
  4. 这样,每当我们发布版本时,都会清除并重新加载所有CSS和JS文件。缺点是所有文件都被清除,而不仅仅是那些已被修改过的文件,但我们不会发布许多公开发布,而且它比替代方案更好。