У меня есть сайт ASP.Net(бывает MVC, но это не имеет значения здесь) с несколькими страницами, которые я хотел бы кэшировать очень хорошо.
В частности, я хотел бы достичь:
- выводится на сервер в течение 2 часов.
- Если содержимое файла на сервере изменяется, этот выходной кеш должен быть очищен для этой страницы
- кэшируется в браузере в течение 10 минут (т.е. даже не спрашивает сервер, если он свежий)
- когда браузер выполняет фактический последующий запрос, я бы хотел, чтобы он использовал etags, чтобы сервер мог вернуть 304, если не был изменен.
(примечание - приведенные выше значения являются ориентировочными примерами)
- 1) и 2) я могу выполнить с помощью Response.Cache.SetCacheability(HttpCacheability.Server)
- Я знаю, 3) может быть достигнуто с помощью макс-возраста и контроля кеша: 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.
- установка таких переменных, как указано выше, где бы я установил продолжительность кэширования вывода?
Спасибо за любые советы!