【问题标题】:Handle cached images? How to get the browser to show the new version?处理缓存的图像?如何让浏览器显示新版本?
【发布时间】:2012-02-13 19:34:26
【问题描述】:

嗨,

当一个带有图片(img_01.jpg)的网页被加载时,图片将被浏览器缓存。假设我们更新 img_01.jpg 并以相同的名称保存,当访问同一页面时,旧图像将从缓存中显示。

我应该如何在 ASP.NET MVC 中处理这个问题?

我知道在常规的 ASP.NET(无 MVC)中必须创建一个额外的组件,并且该组件会在文件名的末尾添加一个随机数。如何在 ASP.NET MVC 中执行此操作?

致以最诚挚的问候

【问题讨论】:

    标签: asp.net asp.net-mvc image browser


    【解决方案1】:

    您可以使用HTTP handlers for images 添加过期标头。但如果正确使用过期标头,它主要取决于浏览器。有帮助吗?

    【讨论】:

    • 嗯,看了你的链接,我记得很久以前做过这样的事情。我所做的是在末尾添加一个随机数,如下所示: myimage.jpg?id=[random] ,这样可以确保每次都从服务器加载图像。然而,我确实不需要像本文建议的那样更改 IIS 上的任何内容。问题是这是否真的比在真实文件名的末尾添加一个随机字符串更好?最后一种解决方案意味着我们只在新的随机数(更新)时才下载新图像。
    • 添加随机字符串会使图像成为从浏览器的角度来看的不同资源。如果您可以使用此类图像的名称(myimage.jpg?id=474484),那也没关系。在某些情况下,它可能并不好。因此,您可以处理浏览器对图像的请求,并将过期标头(日期设置为过去)添加到响应中。它会告诉浏览器资源已经过期,下次它会再次从网络服务器请求它。
    【解决方案2】:

    我决定在图像文件名中使用主对象版本号,这将确保最终用户始终看到正确的图像。

    【讨论】:

      【解决方案3】:

      在 C# 中,当您绑定图像控件时,只需将 url 作为查询字符串。 例如:-

      string  _urlPhoto = "UploadPhoto" + "/" + Imagename + "?" + Guid.NewGuid().ToString();
      

      浏览器将始终将其视为新请求,并且不会从缓存中获取图像。

      【讨论】:

      • 这是一个非常糟糕的解决方案。缓存的整个想法是提高性能。此解决方案放弃了整个性能优化尝试。
      猜你喜欢
      • 2011-09-27
      • 2010-10-25
      • 1970-01-01
      • 2010-11-26
      • 2017-05-10
      • 2020-11-03
      • 2011-09-14
      • 2010-11-15
      • 1970-01-01
      相关资源
      最近更新 更多