ETags, IIS7, Политика кэширования ядра (enableKernelCache) - PullRequest
6 голосов
/ 22 декабря 2009

Вопрос из двух частей (части тесно связаны): с политикой OOTB ETag по умолчанию, которую использует IIS7, почему мы не видим взаимодействие 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 для изображения?

Кроме того, по умолчанию файл applicationHost для IIS7 имеет следующее (1):

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

Распространяется ли 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>

(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 Ответ

4 голосов
/ 22 декабря 2009

Обработка ETag и связанных с ним If-None-Match / If-Modified-Since в некоторой степени зависит от браузера. Вы можете попробовать несколько разных браузеров и посмотреть, что произойдет - в общем, если вы не установите явное время истечения, я бы ожидал увидеть 304, как вы сказали.

Для кэширования ядра по умолчанию включено для статических файлов. Чтобы понять, что происходит, я нашел полезным выполнить следующую команду:

netsh http show cachestate

Это покажет информацию о файлах, которые в данный момент находятся в кеше.

Имейте в виду, что на файлы обычно нужно ссылаться пару раз в течение определенного промежутка времени, прежде чем ядро ​​их кеширует.

...