У меня динамически генерируемый файл 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 , когда содержимое не изменилось?