如何使用Web服务器配置设置禁用IIS 7中单个文件的缓存

时间:2010-10-14 01:01:54

标签: xml caching iis azure iis-7

有没有办法在我的ASP.NET应用程序中缓存单个javascript文件的缓存而不禁用应用程序中任何其他文件的缓存?

它在Azure中的IIS 7上运行,所以对我而言,我唯一的控制它的选项是在webserver标记内。

我目前使用的是folowwing配置,但这是禁用所有文件的缓存。      

     <modules runAllManagedModulesForAllRequests="true"/>

    <staticContent>
      <clientCache cacheControlMode="DisableCache"/>
    </staticContent>

  </system.webServer>

我只想禁用经常更改的单个javascript文件的缓存。

有可能吗?

6 个答案:

答案 0 :(得分:41)

我偶然发现了这个问题;您可以使用以下命令禁用特定文件上的缓存:

<configuration>
  <location path="path/to/the/file">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="DisableCache" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

(注意路径是相对于web.config文件的)

或者,将单个文件放在它自己的目录中,并为该目录提供它自己的web.config,以禁用其中所有内容的缓存;

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Cache-Control" value="no-cache" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

[两者都在Windows 7上的IIS7.5上进行了测试,但你必须确认它在Azure上运行正常]

答案 1 :(得分:8)

您将要查看System.WebServer / Caching类,您可以在其中将缓存配置文件应用于特定扩展。这将至少使您能够控制以.js。

结尾的所有Javascript文件
<system.webServer>
...

   <caching>
      <add extension=".js" policy="DontCache" kernelCachePolicy="DontCache" />
   </caching>

</system.webServer>

这应该禁用来自云的进程和内核缓存的.js缓存。

认为你可以在一个只包含你的文件的文件夹中创建这个web.config,它只会在该文件夹级别禁用.js的缓存。老实说,我自己没有尝试过,所以只是一个你可以测试的建议。


除此之外,请查看与缓存配置相关的IIS文档:

/缓存:http://www.iis.net/ConfigReference/system.webServer/caching

/缓存/个人资料:http://www.iis.net/ConfigReference/system.webServer/caching/profiles

/缓存/个人资料/添加:http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add

希望加上对这些配置标签的一些研究会有所帮助。

如果没有,我建议您考虑实现一个可以插入IIS请求管道的自定义HTTP模块,它可以将缓存控制过滤到该特定文件

**它的价值仅在于IIS的行为,并且在Azure内外不会有所不同,因此您可以轻松地测试本地,而无需使用Dev结构或Azure测试。

答案 2 :(得分:8)

看起来上面的答案缺少“个人资料”标签

<caching>
  <profiles>
    <add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/>
  </profiles>
</caching>

答案 3 :(得分:3)

您可以通过在文件夹级别删除扩展名来禁用文件夹级别的输出缓存,方法是在此文件夹中包含web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
        <caching>
            <profiles>
                <remove extension=".js" />
            </profiles>
        </caching>

  </system.webServer>
</configuration>

现在此文件夹不会为以.js

结尾的文件启用输出缓存

答案 4 :(得分:1)

打开IIS面板。

从站点打开相关应用程序,然后导航到包含特定文件的文件夹。

现在从右侧窗格切换到内容视图

选择所需的文件

现在右键单击文件以选择“切换到功能视图”。

从那里选择HTTP Response Headers,单击“Add”添加新标题,添加“Cache-Control”标题,带“no-cache”值。

答案 5 :(得分:0)

是的,您可以在配置文件中执行此操作:
(见https://stackoverflow.com/a/4821328/2247494

<configuration>
    <location path="cache.manifest">
      <system.webServer>
        <staticContent>
          <clientCache cacheControlMode="DisableCache" />
        </staticContent>
      </system.webServer>
    </location>
</configuration>