6

我正在使用 Azure 和 IIS 7.5 为我的 Web 应用程序提供服务,但我没有使用 .NET。

我正在尝试覆盖我的静态文件的默认缓存控制值,但无论我指定什么,IIS 7.5 似乎都添加了无缓存。

我的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

谢谢!

4

2 回答 2

2

显然,输出缓存需要一个 location 属性,否则它将覆盖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>
于 2012-09-11T08:41:54.727 回答
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,你可以阅读这篇文章。

于 2012-09-10T23:57:53.843 回答