【问题标题】:How do I disable caching of an individual file in IIS 7 using weserver config settings如何使用 weserver 配置设置禁用 IIS 7 中单个文件的缓存
【发布时间】:2011-04-25 03:55:56
【问题描述】:

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

它在 Azure 的 IIS 7 上运行,所以对我来说,控制它的唯一选项似乎是在 webserver 标签内。

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

     <modules runAllManagedModulesForAllRequests="true"/>

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

  </system.webServer>

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

有可能吗?

【问题讨论】:

  • 是的,这是可能的,你可以在你的配置文件中做到这一点:将 包装到 中,(见下面我的帖子)

标签: xml caching iis azure iis-7


【解决方案1】:

打开 IIS 面板。

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

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

选择你想要的文件

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

从那里选择 HTTP 响应标头,单击“添加”以添加新标头,添加带有“no-cache”值的“Cache-Control”标头。

【讨论】:

  • 为所有请求添加 HTTP 标头,而不是所选文件。
【解决方案2】:

是的,有可能,你可以在配置文件中做:
(见https://stackoverflow.com/a/4821328/2247494

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

【讨论】:

    【解决方案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】:

      我只是偶然发现了这个问题;您可以使用以下方法禁用特定文件的缓存:

      <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 上运行正常]

      【讨论】:

      • 非常适合通过源代码控制或持续集成发布到 Azure Web 应用的静态上下文。在我的例子中,一个 Angular CLI 构建的应用程序在其中生产构建负责为捆绑文件创建缓存破坏名称,而我想要的所有无缓存是 index.html。谢谢!
      • 您能否详细说明为什么您将 Web.config 放入目录的第二种方法使用完全不同的方法? clientCache 和 Cache-Control=no-cache 有什么区别?
      • 没有理由选择不同的机制。事实上,直到你提出来,我才注意到我有!我猜这两种机制都行得通。
      • 我知道已经有一段时间了,但是如果我有多个文件,并且不想要整个文件夹,我是否必须为每个文件制作整个块,或者我们可以将其他文件分开逗号什么的?
      【解决方案5】:

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

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

      【讨论】:

      • 在这里重申一下,'policy="DontCache"' 对我不起作用,但 'policy="DisableCache"' 确实有效。
      【解决方案6】:

      您将需要查看 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

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

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

      ** 值得一提的是,这只是 IIS 行为,在 Azure 内外都不会有所不同,因此您可以轻松地测试本地,而无需打扰 Dev Fabric 或 Azure 测试。

      【讨论】:

      • 此答案缺少配置的 标记。有关正确格式,请参阅“什么会很酷”的答案。
      • 另外,我应该注意,'policy="DontCache"' 对我不起作用,但 'policy="DisableCache"' 确实有效。
      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2020-06-20
      • 1970-01-01
      相关资源
      最近更新 更多