【问题标题】:Does the browser cache dynamic images?浏览器是否缓存动态图像?
【发布时间】:2011-07-19 13:01:52
【问题描述】:

我目前正在开发一个可供多个客户端使用的 Web 应用程序,我希望在每个页面上显示客户端徽标。该应用程序正在使用 ASP.NET MVC3 和 C# 开发。

通常的约定建议将图像存储在数据库中,但鉴于此图像将显示在每个页面上,我担心这样做会影响性能。如果我将图像存储在文件系统上,浏览器将缓存图像并且不会每次都请求它。

如果我将图片存储在数据库中,浏览器是否也会缓存这个,还是每次都会调用该函数来请求图片?

在这种情况下,我将图像存储在服务器的硬盘上会更好吗?

【问题讨论】:

  • 被不同的客户使用但具有相同的网址?听起来很愚蠢,但我想确定:)

标签: c# asp.net-mvc browser-cache


【解决方案1】:

(现代)浏览器不知道服务器做了什么来存储图像。如果 URL 相同,浏览器只会提取缓存版本,除非明确告知不要这样做。

在某些情况下,您可能需要禁用缓存:http://www.example.com/random-image 可能会在每次访问时提供不同的图像,并且浏览器会缓存提供的第一个图像。

【讨论】:

  • 谢谢,最终我猜浏览器只会看到您指定格式的 URL,然后由浏览器决定是否重新加载图像与否。我可能会考虑 Zootius 关于手动设置缓存限制的建议,但浏览器肯定会自动执行此操作吗?
  • 抱歉,自动执行什么操作?在存在 HTTP 缓存头的情况下,除非显式重写,否则浏览器不会将图形 URL 视为与 HTML URL 有任何不同。唯一向浏览器建议有关缓存的操作是 HTTP 中的缓存标头。调用页面时,使用 firebug/developer toolbar/fiddler/whatever 查看 HTTP 流量,您将看到正在设置的缓存指令。
  • 默认情况下,缓存标头为您设置。
【解决方案2】:

在您的动态图像控制器中适当地设置 Response.Cache 标头,它来自动态源并不重要。

查看这篇文章,了解使用 MVC ActionFilter 设置缓存的想法:http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx。它还说明了您需要调整的标题。

【讨论】:

  • 你能详细说明一下哪些标题吗?
  • 10 人的初学者:Response.Cache.SetExpires(DateTime.Now.AddYears(1)); Response.Cache.SetCacheability(HttpCacheability.Public);
【解决方案3】:

图像由它们的 URL 缓存。如果自上次加载页面后 URL 未更改,则将从缓存中获取图像。

【讨论】:

  • 浏览器根据Web服务器发送的HTTP缓存头缓存图片。您可能已经注意到,调整查询字符串会“破坏”缓存并强制刷新,但这只是 IIS 标准缓存策略的副作用。如果缓存标头已更改,例如到NoCache,你的断言不正确。
猜你喜欢
  • 2011-01-07
  • 2015-12-07
  • 1970-01-01
  • 2011-01-27
  • 2018-04-20
  • 2011-11-07
  • 2011-09-27
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多