Установка оптимальных заголовков http-кеширования и параметров сервера в ASP.Net MVC и IIS 7.5

У меня есть сайт ASP.Net (оказывается, это MVC, но здесь это не актуально) с несколькими страницами, которые я бы хотел хорошо кэшировать.

В частности, я хотел бы добиться:

  1. вывод кэшируется на сервере в течение 2 часов.
  2. если содержимое файла на сервере изменяется, этот кеш вывода должен быть сброшен для этой страницы
  3. кэшируется в браузер в течение 10 минут (т.е. даже не спрашивайте сервер, настолько ли он свеж)
  4. , когда браузер действительно выполняет фактический последующий запрос, я бы хотел, чтобы он использовал 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.
  • установка переменных, как указано выше, где мне установить продолжительность кэширования вывода?

Спасибо за любые советы!

18
задан Nik 28 September 2010 в 20:30
поделиться