Подтвердить что ты не робот

Настройка оптимальных заголовков кэширования HTTP и параметров сервера в ASP.Net MVC и IIS 7.5

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

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

4b9b3361

Ответ 1

Я не уверен, что вы решили эту проблему еще (несколько месяцев спустя...), но это должно быть возможно.

SetMaxAge должен установить количество "гарантированного" свежего времени. Если вы дополнительно отправите ETag, вы удовлетворитесь 3 и 4. Требования 1 и 2 могут быть решены ортогонально любым используемым механизмом кеширования на стороне сервера: я никогда не использовал кеш-сервер ASP.NET, подобный этому, но это почти наверняка возможно.

Я бы удалил посторонние заголовки из ваших ответов, например SetRevalidation - зачем это нужно?