有没有办法在我的ASP.NET应用程序中缓存单个javascript文件的缓存而不禁用应用程序中任何其他文件的缓存?
它在Azure中的IIS 7上运行,所以对我而言,我唯一的控制它的选项是在webserver标记内。
我目前使用的是folowwing配置,但这是禁用所有文件的缓存。
<modules runAllManagedModulesForAllRequests="true"/>
<staticContent>
<clientCache cacheControlMode="DisableCache"/>
</staticContent>
</system.webServer>
我只想禁用经常更改的单个javascript文件的缓存。
有可能吗?
答案 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>