Почему мои aspx-страницы не кэшируются на клиенте? - PullRequest
5 голосов
/ 08 июня 2010

У меня динамически генерируемый файл 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 Ответ

5 голосов
/ 08 июня 2010

1) Vary: * приведет к тому, что некоторые браузеры, такие как IE, не будут кешироваться. Варьируется: User-Agent может работать лучше (не уверен).

2) WRT 200 против 304: отправляет ли клиент заголовок If- *?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...