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

Posted

技术标签:

【中文标题】为静态资源启用浏览器缓存【英文标题】:Enable browser caching for static resources 【发布时间】:2014-07-27 12:25:57 【问题描述】:

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

Expires: Sun, 29 Mar 2020 00:00:00 GMT

Cache-Control: Public

我正在为站点虚拟目录中的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

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

【问题讨论】:

不知何故你使用ETag 找到它的位置并为图像禁用它。 @Aristos,我使用KristoferGforums.iis.net/t/1177192.aspx 提供的解决方案删除了​​ETag。但它仍然没有被缓存。 另请参阅此答案***.com/questions/11393649/… 如果这不起作用,请检查您的图像是否从某种添加无缓存的 http 处理程序传递。还要检查您是否通过安全协议发送它们,这会使它们不被缓存。 站点配置为https。这会产生问题吗? 是的,可能这就是原因,但我对此没有一个快速的答案,除了使用ETag,它只对服务器进行一次旅行,如果 ETag 没有更改此会话的图像不再加载。 【参考方案1】:

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

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="UseMaxAge",设置具体的过期时间

设置过期时间为 7 天的示例

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

阅读更多http://msdn.microsoft.com/en-us/library/ms689443.aspx

【讨论】:

以上是关于为静态资源启用浏览器缓存的主要内容,如果未能解决你的问题,请参考以下文章

浏览器缓存策略

HTTP 缓存策略

如何使用 Tomcat 启用静态内容(图像、css、js)的浏览器缓存?

前端静态资源缓存控制策略浅析

nginx静态资源缓存

互联网企业静态资源的部署,如何充分利用浏览器缓存机制