我使用Azure和IIS 7.5来提供我的网络应用程序,但我不是在使用.NET。
我正在尝试覆盖静态文件的默认缓存控制值,但无论我指定什么,IIS 7.5似乎都会添加 no-cache 。
我的 approot / web.config 文件如下所示:
<?xml version="1.0"?>
<configuration>
<system.webServer>
...
<staticContent>
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
...
</system.webServer>
</configuration>
我的回复标题是:
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Cache-Control:no-cache,public,max-age=2592000
Content-Encoding:gzip
Content-Length:4309
Content-Type:application/x-javascript
Date:Mon, 10 Sep 2012 14:42:07 GMT
ETag:"8ccd2f95a8fcd1:0"
Last-Modified:Mon, 10 Sep 2012 13:48:36 GMT
Server:Microsoft-IIS/7.5
Vary:Accept-Encoding
X-Powered-By:ASP.NET
我在其中一个子文件夹中有一个额外的 web.config 文件,但不会覆盖任何 clientCache 值。
有谁知道为什么IIS正在提前 no-cache ?
谢谢!
答案 0 :(得分:2)
显然,输出缓存需要一个位置属性,否则它将覆盖 staticContent / clientCache 设置。
<system.webServer>
...
<caching>
<profiles>
<add extension="*" policy="CacheForTimePeriod" duration="00:01:00" varyByQueryString="*" varyByHeaders="X-Requested-With" location="Any" />
</profiles>
</caching>
...
</system.webServer>
答案 1 :(得分:0)
根据您的问题,我认为您正在使用具有Web角色的Windows Azure云服务。
在这种情况下,您需要使用启动任务在IIS中设置Cache-Control,一旦角色启动,它将与您的网站配置保持一致。启动任务中的命令应如下所示:
appcmd.exe set config "Default Web Site/folder" -section:system.webServer/staticContent -clientCache.cacheControlCustom:public
appcmd.exe set config "Default Web Site/folder" -section:system.webServer/staticContent -clientCache.cacheControlMode:UseMaxAge
appcmd.exe set config "Default Web Site/folder" -section:system.webServer/staticContent -clientCache.cacheControlMaxAge:"30.00:00:00"
如果您想知道如何在启动任务中使用appcmd,可以阅读this文章。