在 IIS 中,我可以将其配置为为同一文件夹中的不同静态文件类型返回不同的缓存控制 header 吗?
我知道我可以使用 HTTP header 功能来设置立即过期,但这似乎会影响所有内容。有没有办法为静态内容的特定文件扩展名做这件事?
最佳答案
虽然不是一个理想的答案,但我确实找到了解决方法。在我的应用程序中,我可以控制我的 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 应该真的让这更简单。按文件类型缓存的配置可以完美运行,不需要严格的目录结构管理,并非所有项目都可以灵活遵循。
关于iis-7 - 是否可以针对不同的静态文件类型控制 IIS 中的 Cache-Control header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10138615/