【问题标题】:Dynamic CSS - caching problem?动态 CSS - 缓存问题?
【发布时间】:2011-10-01 11:26:06
【问题描述】:

我正在使用 HttpHandler 动态修改一些 CSS(仅简单的颜色),基于我在 SO 上读到的一种技术。

一切都很好,期待在我让用户选择指定他们想要的颜色的页面上。理想情况下,一旦用户保存他的新颜色并且页面刷新,我希望显示新颜色。但是,它们只有在我明确按下浏览器重新加载或 F5 键时才会出现。

我很欣赏某处(IIS 或浏览器)正在对我的样式表进行一些有用的缓存,这正是我想要的 1000 次 999 次,但是在这个特定的页面事件中,我希望能够强制重新加载并导致要触发的 HttpHandler。

有人了解它的工作原理以及我能做什么吗?

我尝试过的事情:

    Response.Clear();
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Expires = -1;
    Response.Cache.SetExpires(DateTime.Now.AddDays(-1));

因为我也在使用 ASP.NET 主题添加查询字符串,所以样式表链接并不是一个简单的选择。

有人想吗?

【问题讨论】:

  • 你保存用户偏好的控件是一个很好的老式帖子,对吧?
  • 我不是 ASP.net 专家,但有没有办法可以更改样式表的名称?这应该会在代理级别和浏览器级别停止缓存。

标签: c# asp.net css caching httphandler


【解决方案1】:

这可以通过我在我的网站上使用的技术来解决,一旦资产发生更改(例如在部署之后)就会重新加载它们。

?value 附加到 CSS url 的末尾,其中 value 对应于版本,或者浏览器尚未看到的某个唯一值。在我的情况下,我使用文件修改时间,但在你的情况下,由于 CSS 在几乎每次页面加载时都是动态的,我建议生成一些唯一值。

由于 URL 总是不同的,浏览器总是会重新加载它,它永远不会被放入缓存中。

【讨论】:

  • “因为我也在使用 ASP.NET 主题添加查询字符串,所以样式表链接并不是一个简单的选择。”
  • 啊,我明白了。我不熟悉 ASP.NET 主题;但是,您能否验证服务器/客户端时钟是否同步?如果您将过期时间设置在过去的某一天并且客户的时钟错误,则可能无法正常工作。
  • 正如问题所述,我正在寻找一种不需要修改样式表查询字符串的解决方案...
  • 好的,那么您需要确保您的所有客户都遵守您设置的过期标头。更改 URL 肯定会引发新的请求。
  • 如何确保客户端尊重 expires 标头?这不是浏览器的问题,我在服务器端无法控制吗?
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2017-10-23
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多