静态内容的浏览器缓存

时间:2016-05-11 01:34:07

标签: asp.net-mvc web-config sitecore iis-7.5 sitecore7.2

我正在尝试更新影响静态资源(js,css,images)的浏览器缓存设置的配置。

我有Sitecore CMS网站和图像上传到CMS,这些图像缓存在浏览器中(状态代码= 200(来自缓存),当我在Chrome浏览器中观察网络时),但我的其他资源如js和css服务来自网站文件夹不会缓存在浏览器中,状态代码为304(这是服务器缓存,需要往返检查任何更新。)

我在web.config文件中有以下配置设置:

    <caching>
        <profiles>
            <add extension=".jpeg" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
            <add extension=".js" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
            <add extension=".png" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
            <add extension=".jpg" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
            <add extension=".css" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
            <add extension=".json" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:00:30" />
        </profiles>
    </caching>
    <staticContent>
        <remove fileExtension=".woff2" />
        <mimeMap fileExtension=".json" mimeType="application/json" />
        <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff2" />
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
    </staticContent>

现在,如果我删除了缓存配置文件条目,那么资源将缓存在浏览器中,我可以看到所有css,js状态代码为200(来自缓存),用于后续请求。

我的问题是,这里的区别是,即使添加了 staticContent 设置,浏览器缓存也无效。如果删除现有的缓存配置文件设置会有什么影响(它会影响服务器缓存吗?)。

我看到了其他一些links,它解释了静态缓存设置,但我想知道我所做的更改对其影响(删除了缓存配置文件)

请告诉我您的意见。

以下是Response标头详细信息: 使用缓存配置文件

enter image description here

没有缓存配置文件

enter image description here 谢谢, 沙拉斯

1 个答案:

答案 0 :(得分:3)

因此,您似乎正在为web.config .jpeg节点内的.jssystem.webServer/caching,...配置IIS output cache(请注意,{{1} },而不是.webServer)。

不幸的是,IIS输出缓存(以及Asp.Net output cache)也会处理客户端缓存,因此会干扰(严重)您的客户端缓存设置。 (在我看来,这应该是两个独立的事项,但这不是IIS / Asp.Net输出缓存处理它的方式。)

您的个人资料未设置location attribute,因此默认为.web。使用输出缓存语义,这意味着&#34;没有客户端缓存&#34;,因此它在Server响应头中添加了no-cache

为避免这种情况,您可以将自己的个人资料Cache-Control更改为location

Any

但也许你不应该只为<profiles> <add extension=".jpeg" location="Any" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> <add extension=".js" location="Any" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> <add extension=".png" location="Any" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> <add extension=".jpg" location="Any" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> <add extension=".css" location="Any" policy="CacheUntilChange" kernelCachePolicy="DontCache" /> <add extension=".json" location="Any" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:00:30" /> </profiles> 使用IIS输出缓存,.jpeg,...
来自official IIS documentation

  

静态文件(如HTML,JPG或GIF文件,......)无需输出缓存。

对静态文件使用IIS输出缓存没有任何好处。 (使用IIS前面的实际缓存服务器(如清漆)可能会带来好处,但使用IIS输出缓存模拟缓存服务器对静态文件没有任何好处。)

如果您有一些特殊情况URI结尾带有静态文件扩展名但实际上由您的应用程序动态提供,而不是直接对应于磁盘上的文件(特殊情况通常涉及使用rammfar这对应用程序可伸缩性来说是一件坏事;链接页面提供了一些替代方法),最好通过在

下配置来尝试为这些URI启用输出缓存
.js

(我不确定它是否有效,当然可以更好地测试它。)