代码之家  ›  专栏  ›  技术社区  ›  Nariman

etags、iis7、内核缓存策略(EnableKernelCache)

  •  6
  • Nariman  · 技术社区  · 15 年前

    两部分问题(部分紧密相关):与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的文件具有以下内容(1):

       <caching enabled="true" enableKernelCache="true">
       </caching>
    

    enableKernelCache='true' 扩展到所有静态文件,使您不再需要显式注册扩展来授予 缓存UntilChange 作为核心策略(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>
    

    (1)%systemroot%\system32\inetsrv\config\applicationhost.config

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   RickNZ    15 年前

    ETags和关联的if none match/if modified since的处理在某种程度上依赖于浏览器。您可以尝试使用几个不同的浏览器,看看会发生什么——一般来说,如果您没有设置明确的到期时间,我希望看到304,如您所说。

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

    netsh http show cachestate
    

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

    请记住,在内核缓存文件之前,通常必须在特定的时间窗口内引用文件几次。

    推荐文章