c# - 整个解决方案中的 HTTP 响应 header (缓存清除)

标签 c# html css asp.net caching

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

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

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 响应 header 可以实现其目标,我也计划应用一个过期时间。

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

最佳答案

如果您使用母版页,那么在其中设置标题就足够了。

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

  1. 我们使用 Cruise Control 生成包含版本的文本文件 每个构建的 ID(例如“2014-05-13.001”)
  2. 在 .net 中,我们使用 StreamReader 来获取当前的 buildId 并存储 它在应用程序对象中
  3. 我们将 id 作为查询字符串参数附加到我们所有的 CSS 和 JS 文件引用中。

这样,每当我们发布一个版本时,所有的 CSS 和 JS 文件都会被清除并重新加载。缺点是所有文件都会被清除,而不仅仅是那些已修改的文件,但我们不会发布很多公开版本,而且它比替代方案要好。

关于c# - 整个解决方案中的 HTTP 响应 header (缓存清除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23620394/

相关文章:

c# - 对于 SQLCLR 存储过程,CREATE PROCEDURE 获取 "Msg 6567, Level 16, State 2"

c# - 如何通过正则表达式检查允许 '[' 和 ']'

javascript - jQuery 中的单选按钮验证

c# - 在if语句中将整数变量与整数列表进行比较的任何方法

c# - 在 C# 中比较 2 个 FileAttributes 必须始终返回 true

java - 如何在 Selenium 中记录充当按钮的图像的点击事件?

javascript - 在 HTML 文件中搜索 - Swift

javascript - HTML5 Canvas drawImage 比例bug iOS

html - 在 SASS 中,有什么方法可以在可扩展选择器中引用选择器值吗?

html - 文本对齐证明不适用于 add_shortcode 生成的元素