两部分问题(部分密切相关):使用IIS7采用的默认OOTB ETag策略,为什么我们在浏览页面时看不到If-None-Match / 304交互?
例如,为空缓存请求返回的标头是:
Content-Type image/png
Last-Modified Thu, 03 Dec 2009 15:51:56 GMT
Accept-Ranges bytes
Etag "a8a0628a3074ca1:0"
Server Microsoft-IIS/7.0
X-Powered-By ASP.NET
Date Tue, 22 Dec 2009 19:47:36 GMT
Content-Length 1780
...然后对页面的后续访问不会为图像生成304往返?
此外,IIS7的默认 applicationHost 文件具有以下(1):
<caching enabled="true" enableKernelCache="true">
</caching>
enableKernelCache ='true'是否扩展到所有静态文件,使您无需明确注册扩展以授予 CacheUntilChange 作为内核策略(2):< / p>
<caching>
<profiles>
<add extension=".gif" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".png" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".js" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".css" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".jpg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".jpeg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
</profiles>
</caching>
(1)%systemroot%\ System32 \ inetsrv \ config \ applicationHost.config
(2)http://labs.episerver.com/en/Blogs/Per/Archive/2009/3/Configuring-cache-expiration-on-IIS-7/
答案 0 :(得分:4)
ETag的处理和相关的If-None-Match / If-Modified-Since在某种程度上取决于浏览器。您可以尝试使用几种不同的浏览器,看看会发生什么 - 一般情况下,如果您没有设置明确的过期时间,我会期望看到304,就像您说的那样。
对于内核缓存,默认情况下会启用静态文件。为了帮助了解发生了什么,我发现运行以下命令很有帮助:
netsh http show cachestate
这将显示有关当前缓存中的文件的信息。
请记住,在内核缓存文件之前,通常必须在特定时间窗口内多次引用文件。