使用静态内容的查询字符串在 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="UseMaxAge
和 cacheControlMaxAge="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>
我的站点是静态站点,我从 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="UseMaxAge
和 cacheControlMaxAge="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>