我正在尝试更新影响静态资源(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标头详细信息: 使用缓存配置文件:
没有缓存配置文件:
答案 0 :(得分:3)
因此,您似乎正在为web.config .jpeg
节点内的.js
,system.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
这对应用程序可伸缩性来说是一件坏事;链接页面提供了一些替代方法),最好通过在
.js
(我不确定它是否有效,当然可以更好地测试它。)