У меня есть динамично сгенерированный файл CSS. Это является довольно большим, и имеет другое содержание для различных браузеров. Это изменяется очень редко.
Таким образом наверху .aspx
страница я имею:
<%@ OutputCache Duration="86400"
Location="ServerAndClient"
VaryByParam="none"
VaryByCustom="browser" %>
У меня есть подобная директива против действий MVC, которые генерируют динамические изображения:
[OutputCache(Duration = 86400,
VaryByParam = "none",
Location = OutputCacheLocation.ServerAndClient)]
Это должно привести к файлу, кэшируемому на сервере и клиенте (но не промежуточные прокси) в течение дня.
Заголовки ответа, кажется, корректны:
HTTP/1.1 200 OK
Cache-Control: private, max-age=83831
Content-Type: text/css; charset=utf-8
Expires: Wed, 09 Jun 2010 08:52:45 GMT
Last-Modified: Tue, 08 Jun 2010 08:52:45 GMT
Vary: *
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Tue, 08 Jun 2010 09:35:34 GMT
Content-Length: 70073
Серверные работы кэширования - дальнейшие запросы не выполняют код снова.
Однако клиентское кэширование повреждается двумя различными способами: во-первых содержание требуют снова на каждой странице, несмотря на то, что это должно кэшироваться.
Почему браузер запрашивает содержание снова?
Во-вторых, когда сервер просят относительно содержания снова, это возвращает HTTP 200 наряду со всем содержанием. Это должно возвратить HTTP 304, Не Измененный без тела - сообщение браузера к повторному использованию, что это уже загрузило.
Как я удостоверяюсь, что это возвращает HTTP 304, когда содержание не изменилось?
1) Vary: * приведет к тому, что некоторые браузеры, например IE, не будут кэшироваться. Vary: User-Agent может работать лучше (не уверен).
2) WRT 200 vs 304: посылает ли клиент заголовок If-*?