ETags,IIS7,内核缓存策略(enableKernelCache)

Nar*_*man 6 asp.net etag iis-7 caching

两部分问题(部分密切相关):使用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
Run Code Online (Sandbox Code Playgroud)

...然后对页面的后续访问不会为图像生成304往返?

此外,IIS7 的默认applicationHost文件具有以下(1):

   <caching enabled="true" enableKernelCache="true">
   </caching>
Run Code Online (Sandbox Code Playgroud)

enableKernelCache ='true'是否扩展到所有静态文件,使您无需显式注册扩展以将CacheUntilChange授予内核策略(2):

<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>
Run Code Online (Sandbox Code Playgroud)

(1)%systemroot%\ System32\inetsrv\config\applicationHost.config

(2)http://labs.episerver.com/en/Blogs/Per/Archive/2009/3/Configuring-cache-expiration-on-IIS-7/

Ric*_*kNZ 4

ETag 和关联的 If-None-Match / If-Modified-Since 的处理在某种程度上依赖于浏览器。您可以尝试几种不同的浏览器,看看会发生什么 - 一般来说,如果您没有设置明确的过期时间,我希望看到 304,正如您所说。

对于内核缓存,默认情况下为静态文件启用。为了帮助了解发生了什么,我发现运行以下命令很有帮助:

netsh http show cachestate
Run Code Online (Sandbox Code Playgroud)

这将显示有关当前缓存中的文件的信息。

请记住,文件通常必须在某个时间窗口内被引用几次,然后内核才会缓存它们。