为静态资源启用浏览器缓存

时间:2014-06-06 09:21:53

标签: html asp.net asp.net-mvc-4 http iis

为了提高网站性能,我在IIS 7.5中添加了以下http标头。

ExpiresSun, 29 Mar 2020 00:00:00 GMTCache-ControlPublic

我在网站的虚拟目录中为images文件夹添加了这些标头。 当我访问该网站时,我看到该文件夹​​中的每个图像;那些响应标题是:

Accept-Ranges:bytes Cache-Control:no-cache, no-store,Public Content-Length:4445 Content-Type:image/png Date:Fri, 06 Jun 2014 09:18:36 GMT ETag:"16874c2af55ecf1:0" Expires:-1,Sun, 29 Mar 2020 00:00:00 GMT Last-Modified:Wed, 23 Apr 2014 13:08:48 GMT max-age:604800 Pragma:no-cache Server:Microsoft-IIS/7.5 X-Powered-By:ASP.NET

我需要浏览器从其缓存中获取这些图像,而不是再次从服务器请求。我应该如何实现它?

1 个答案:

答案 0 :(得分:3)

您的标题显示您添加了新值,但您需要替换现有的

Cache-Control:no-cache, no-store,Public
Expires:-1,Sun, 29 Mar 2020 00:00:00 GMT

no-cache, no-store代表无缓存,-1表示内容已过期。

您可以轻松地在根web.config文件中将其设置为

,而不是从代码中执行此操作
...
  <location path="images">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="UseExpires" 
                     httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" /> 
      </staticContent>
    </system.webServer>
  </location>
</configuration>

其中images是目录的名称

或直接在目标目录中添加专用的web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseExpires" 
                   httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" /> 
    </staticContent>
  </system.webServer>
</configuration>

您还可以使用cacheControlMode =&#34; UseMaxAge&#34;并设定特定的到期时间

在7天内设置到期的示例

<clientCache cacheControlMode="UseMaxAge" 
             cacheControlMaxAge="7.00:00:00" /> 

了解更多http://msdn.microsoft.com/en-us/library/ms689443.aspx