0

我已将 ImageResizer.MVC nuget 包添加到我的 MVC4 解决方案中,并且效果非常好。

当我们开始优化发布时,我注意到我们所有的图像都有一个像这样的缓存控制头:

Accept-Ranges:bytes
Cache-Control:no-cache,private,max-age=86400
Date:Wed, 14 Aug 2013 12:23:42 GMT
ETag:"e8611769095ce1:0"
Last-Modified:Fri, 09 Aug 2013 13:00:23 GMT

Cache-Control 标头有我的设置,但它们前面是 no-cache。

结果,所有图像都向服务器发出请求,返回 304。

如果我在 Visual Studio 开发服务器中运行该项目,则缓存可以正常工作。

Image Resizer 调试页面显示为链接here提到ImageResizer.Plugins.Basic.NoCache插件。

我认为该插件意味着 ImageResizer 没有做任何“聪明”的缓存,而不是它会在标题中添加 no-cache。

是否ImageResizer.Plugins.Basic.NoCache意味着强制执行 'no-cache' 的 Cache-Control 标头?


编辑:这是 web.config 中的缓存设置

<caching enabled="true" enableKernelCache="true">
  <profiles>
    <add extension=".gif" location="Any" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
    <add extension=".png" location="Any" policy="CacheForTimePeriod" kernelCachePolicy="CacheUntilChange" duration="12:00:30" />
    <add extension=".jpg" location="Any" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
  </profiles>
</caching>

<staticContent>
  <clientCache cacheControlCustom="private" cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
</staticContent>
4

1 回答 1

2

NoCache 只是一个非磁盘缓存文件服务器;它不会阻止提供缓存标头。

它通常被 DiskCache 取代,后者包括服务器端磁盘缓存和对所有 HTTP 缓存标头的支持。您还可以添加免费的 ClientCache 插件来提供过期标头。

于 2013-08-14T19:39:32.410 回答