У меня есть сайт 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.
- установка переменных, как указано выше, где бы я установил продолжительность кэширования вывода?
Спасибо за любые советы!