У меня есть сайт ASP.Net (оказывается, это MVC, но здесь это не актуально) с несколькими страницами, которые я бы хотел хорошо кэшировать.
В частности, я хотел бы добиться:
- вывод кэшируется на сервере в течение 2 часов.
- если содержимое файла на сервере изменяется, этот кеш вывода должен быть сброшен для этой страницы
- кэшируется в браузер в течение 10 минут (т.е. даже не спрашивайте сервер, настолько ли он свеж)
- , когда браузер действительно выполняет фактический последующий запрос, я бы хотел, чтобы он использовал etags, чтобы сервер мог вернуть 304, если нет изменен.
(примечание - значения времени выше являются только ориентировочными примерами)
- 1) и 2) Я могу добиться с помощью Response.Cache.SetCacheability (HttpCacheability.Server)
- Я знаю 3) можно достичь с помощью max-age и cache-control: private
- Я могу генерировать etags с помощью Response.Cache. SetETagFromFileDependencies ();
, но я не могу заставить все из этих вещей работать вместе. Вот что у меня есть:
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetETagFromFileDependencies();
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetMaxAge(TimeSpan.FromSeconds(60 * 10));
Возможен ли сценарий, который я хочу? В частности:
- могут ли браузеры делать то же самое и 3), и 4)? Когда Firefox выдает новый запрос после истечения срока его действия в локальном кеше, он действительно отправляет etag, на который сервер ответил раньше, но я получаю ответ 200.
- установка переменных, как указано выше, где мне установить продолжительность кэширования вывода?
Спасибо за любые советы!
задан Nik 28 September 2010 в 20:30
поделиться