是否可以在IIS中控制不同静态文件类型的Cache-Control标头?

时间:2012-04-13 09:45:36

标签: iis-7

在IIS中,我可以将其配置为在同一文件夹中为不同的静态文件类型返回不同的缓存控制头吗?

我知道我可以使用HTTP标头功能立即设置Expires,但这似乎会影响所有内容。有没有办法为静态内容的特定文件扩展名执行此操作?

1 个答案:

答案 0 :(得分:1)

虽然不是理想的答案,但我确实找到了解决方法。在我的应用程序中,我可以控制我的JS,CSS和其他类似文件在目录结构中的位置。我所做的是将web.config放在IIS根目录中,其中包含以下几行(以及其他不相关的内容):

<configuration>
  <system.webServer>
     <staticContent>
       <clientCache cacheControlMode="DisableCache" setEtag="true" />
     </staticContent>
  </system.webServer>
</configuration>

这将设置IIS中的默认值,即不应该缓存任何内容。这是我的单页应用程序(SPA)的HTML页面(index.html)所在的地方,这就是我想要的。

然后,在图像,JS,CSS等的直接子目录中,我有web.config个文件,其内容如下:

<configuration>
  <system.webServer>
     <staticContent>
       <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="14.00:00:00" setEtag="true" />
     </staticContent>
  </system.webServer>
</configuration>

您当然可以将年龄设置为所需的任何值。我现在要从14天开始,直到我确定一切都正确为止,然后我可能会将其延长到几个月。

这样,我的SPA的HTML将永远不会被缓存,但是所有JS / CSS /图像都将在我希望的时间内存在。当我为下一个部署重建项目时,web-pack将为打包的JS和CSS生成新文件名,因此那里没有缓存问题。当然,HTML文件将具有相同的名称,但包含的JS文件名称将不同。因此,关键是不要缓存HTML文件 ,此设置即可完成。

IIS确实应该使它更简单。按文件缓存类型的配置可以完美运行,并且不需要严格的目录结构管理,因此并非所有项目都具有灵活性。