У меня есть сайт ASP.Net (это MVC, но это не имеет значения здесь) с несколькими страницами, которые я хотел бы кэшировать очень хорошо.Настройка оптимальных заголовков кэширования HTTP и параметров сервера в ASP.Net MVC и IIS 7.5
В частности, я хотел бы достичь:
- выхода кэшированного на сервере в течение 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.
- установка переменных, как указано выше, где бы я установил продолжительность выходного кэширования?
Спасибо за любые советы!
«Firefox ... действительно посылает этаг» - вы имеете в виду в * If-None-Match *? И в этом конкретном случае вы вручную генерировали ETag с помощью 'SetETagFromFileDependencies()'? – bzlm
Правильно, да. – Nik
После этого, как это было разрешено? И как именно это провалилось? – harpo