2009-12-22 2 views
6

Двухчастный вопрос (части тесно связаны): с использованием политики OOTB ETag по умолчанию, которую использует IIS7, почему мы не видим взаимодействие If-None-Match/304 как мы перемещаемся по страницам?ETags, IIS7, политика кэша ядра (enableKernelCache)

Заголовков возвращаются для запроса пустого кэша, например, являются:

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 = 'истинный' распространяется на все статические файлы, освобождая вас от необходимости регистрации расширений явно предоставить 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 \ инет SRV \ Config \ applicationHost.config

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

ответ

4

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

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

netsh http show cachestate 

Это будет отображаться информация о файлах, которые в настоящее время находятся в кэше.

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

+0

Спасибо, Рик; Я пробовал как IE8, так и FF 3.5, и считаю это поведение немного странным - он документирован где угодно? IIS7 (OOTB) не выпускает заголовки истечения, а только ETag; и все же последующие запросы на страницу не генерируют 304s для этих объектов? – Nariman

+0

Единственная документация, о которой я знаю, - это спецификация HTTP. Интересно, видите ли вы оптимизацию за сеанс. Вы пробовали выйти из браузера (все окна), перезапустить и посмотреть, если это приведет к 304s? Есть ли открытая страница, которую я вижу, которая демонстрирует поведение, которое вы описываете? – RickNZ

+0

Поскольку исходные ответы не имеют заголовка Cache-Control, браузер (в некоторой степени) свободно реализует свою собственную политику в отношении кэширования. В этом случае он выбирает кешировать изображения в течение всего сеанса. Если вы закроете вкладку в IE8 с вашим сайтом, а затем откройте новую вкладку и вернитесь на ту же страницу, вы увидите кучу запросов IMS/INM и 304 reponses для всех изображений. – RickNZ