使用静态内容的查询字符串在 IIS 中进行缓存破坏

Cache busting in IIS using query string for static content

我的站点是静态站点,我从 IIS 8 Web 服务器提供内容。我曾经使用 Apache,我有以下缓存清除配置,我想在 IIS 中实现:

# Extend cache expiry for fingerprinted URLs
RewriteCond     %{QUERY_STRING} ^[0-9a-fA-F]{8,}$
RewriteRule     ^   -    [E=revved:1]

然后我根据是否设置了环境变量"revved"来设置Cache-Control:

# (For HTTP/1.1 clients)
Header set Cache-Control "max-age=1200" env=!revved
Header set Cache-Control "max-age=31536000" env=revved

我的 JS 和 CSS 是捆绑在一起的,我将散列附加到查询字符串。我对图像做同样的事情。

到目前为止,我可以做的是使用 <clientCache /> 元素并将 cacheControlMode="UseMaxAgecacheControlMaxAge="00:20:00" 附加到它。

您在 Apache 配置中可以看到,当设置 "revved" 变量时,代理服务器 (CDN) 和客户端应将文件缓存 365 天。否则,它应该只缓存 20 分钟。我想在我的 web.config.

中有相同的行为

我在 IIS 中了解到 "Output Caching",但据我了解,它是为使用 PHP 或 ASP 的动态页面设计的。

如果有人能指导我正确的方向,我将不胜感激。

我相信我想出了一个有效的解决方案。我从这个 post on MSDN "Change or modify a Response Header value using URL Rewrite".

得到了一些提示
<outboundRules>
  <rule name="ChangeCacheControlHeaderOneYear">
    <match serverVariable="RESPONSE_CacheControl" />
    <conditions>
      <add input="{QUERY_STRING}" pattern="^[0-9a-fA-F]{8,}$" />
    </conditions>
    <action type="Rewrite" value="max-age=31536000" />
  </rule>
  <rule name="ChangeCacheControlHeader20Minutes">
    <match serverVariable="RESPONSE_CacheControl" />
    <conditions>
     <add input="{QUERY_STRING}" pattern="^[0-9a-fA-F]{8,}$" negate="true" />
    </conditions>
    <action type="Rewrite" value="max-age=1200" />
    </rule>
</outboundRules>