5

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

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

4

1 回答 1

2

虽然不是一个理想的答案,但我确实找到了解决方法。在我的应用程序中,我可以控制我的 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 确实应该使这更简单。按文件类型缓存的配置可以完美运行,并且不需要严格的目录结构管理,并非所有项目都可以灵活地遵循。

于 2019-09-17T17:39:19.947 回答