【问题标题】:Force a single background image to *NOT* cache强制单个背景图像 *NOT* 缓存
【发布时间】:2012-11-14 16:37:19
【问题描述】:

我的网站上有一个使用背景图片的 div 标签。当我们对该图像进行微小的文本更改并将其通过 ftp 传输回服务器时,它会继续将其作为 304 未修改并使用缓存版本提供服务。只有在我们强制刷新浏览器之前,它才会获取新图像。

我已经阅读了您可以在 HTTP 响应标头中将 Cache-Control 设置为 no-cache 的位置(我使用的是 IIS 7.5),但这仍然没有任何作用,仍然使用缓存的图像并发送回 304。我的解决方法是重命名图像并更改 div 的 css 并且确实有效,但我正在寻找更好的方法。理想情况下,我们希望这个单一图像是动态的,以便我们可以经常更改它,但我们不希望我们的客户必须知道刷新他们的浏览器。

有解决办法吗?

【问题讨论】:

  • AFAIK,在服务器上没有可靠的方法可以做到这一点。我一直在尝试解决类似的任务,但最好的解决方案仍然是一种解决方法:我们有一个 js 函数,它通过不时向它的 src 添加一个随机参数来更新图像。
  • shiftoff 的评论可能是对的:向 img src URL 添加参数可能会强制服务器重新发送图像,因为服务器通常根据查询字符串中的参数提供缓存内容。如果查询字符串发生变化,IIS 应该发送新版本。

标签: asp.net http iis-7 http-headers iis-7.5


【解决方案1】:

更改网址是最常见的解决方法。 就我而言,当我遇到此类问题时,我已将图像移动到单独的控制器中(或者它可能是页面,甚至是 hadler),并添加了由 datetime 类生成的小 url 参数,例如:

http:\\mysite.com\myimage\dynamic.jpg?bla=20121119184001

【讨论】:

  • 这个解决方案是可行的,以前用过很多次来强制新的图像或新的 javascript 更新。但是,图像并不特别需要动态服务器。您可以将随机参数添加到任何请求。网络服务器将忽略它的静态内容并提供文件。
  • 只是为了更进一步,如果你想可靠地做到这一点,你应该将文件的 lastmodified 时间附加到 url 以检索它 - 例如 background.jpg?date=20121119144300 这样,每次你更新文件,检索它的 url 会改变,强制一个新的缓存条目 - 但如果你没有修改它,你仍然可以获得缓存的好处
  • 是的,确实如此。在服务器配置、aspx 页面标记缓存参数、响应标头等方面浪费了太多时间之后,我认为这种解决方法是最简单的解决方案。
  • 我从没想过要添加一个参数。打算试试这个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多