使用静态内容的查询字符串在IIS中缓存清除

时间:2016-07-03 08:36:41

标签: caching iis-8 cache-control

我的网站是一个静态网站,我从IIS 8网络服务器提供内容。我曾经使用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中读到了“输出缓存”,但据我所知,它是为使用PHP或ASP的动态页面而设计的。

如果有人能引导我朝着正确的方向前进,我将非常感激。

1 个答案:

答案 0 :(得分:0)

我相信我想出了一个有效的解决方案。我在MSDN&#34; Change or modify a Response Header value using URL Rewrite&#34;。

上的这篇文章中得到了一些提示
<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>