【问题标题】:Clear all image in browser cache清除浏览器缓存中的所有图像
【发布时间】:2020-04-03 21:55:07
【问题描述】:

我有一个包含图像的 ASP.NET C# 应用程序。我进去修改了一些在应用程序中使用但没有更改名称的图像。我知道如果我更改名称,它会将新图像下载到浏览器,但如果我的客户已经访问过该页面,则该图像很可能会缓存在客户端计算机上。

我想知道,有没有办法在会话开始时通过 GLOBAL.ASAX 页面指示网站应该提取所有信息并下载并忽略所有本地缓存​​数据?

这对 JS 和 CSS 文件也很有帮助。现在我根据应用程序的版本附加一个 URL 参数......我不想对所有图像都这样做......

【问题讨论】:

  • 你可以实现一个自定义控件来添加图片、css、js等静态文件到你的页面。我们实现的那个被命名为***StaticContent,并有一个Src 属性,并在渲染yyyymmddHHmmss 为File.LastModified 日期的资源的最终URL 时添加了?v=yyyymmddHHmmss

标签: c# asp.net browser-cache


【解决方案1】:

您可以使用Clear-Site-Data HTTP 标头。

Clear-Site-Data 标头清除与请求网站关联的浏览数据(cookie、存储、缓存)。它允许 Web 开发人员更好地控制浏览器在本地存储的数据的来源。

它仍被标记为实验性的,但应该适用于所有现代浏览器。 有关更多信息,请参阅 MDN 文档中的 Clear-Site-Data

你可以这样设置这个标题:

response.Headers.Add("Clear-Site-Data", "cache");

如果您想在每次发布新版本时刷新缓存,您可以将其与 cookie 结合并在 global.asax 中使用此代码:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var request = ((HttpApplication)sender).Request;
    var response = ((HttpApplication)sender).Response;

    var versionCookie = request.Cookies["version"];

    if (versionCookie == null)
    {
        versionCookie = new HttpCookie("version");
        versionCookie.Expires = DateTime.Now.AddYears(5);
    }

    if (versionCookie.Value != currentVersion)
    {
        versionCookie.Value = currentVersion;
        response.SetCookie(versionCookie);
        response.Headers.Add("Clear-Site-Data", "cache");
    }
}

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多