disable Отключение кеширования браузеров для всех браузеров из ASP.NET




cache expires header (5)

Это то, что мы используем в ASP.NET:

// Stop Caching in IE
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox
Response.Cache.SetNoStore();

Он останавливает кеширование в Firefox и IE, но мы не пробовали другие браузеры. Этими утверждениями добавляются следующие заголовки ответов:

Cache-Control: no-cache, no-store
Pragma: no-cache

Я после окончательной ссылки на то, что код ASP.NET требуется для отключенных браузеров от кеширования страницы. Существует много способов повлиять на заголовки и метатеги HTTP, и я получаю впечатление, что для правильного поведения разных браузеров требуются разные настройки. Было бы здорово получить контрольный бит кода, прокомментированный, чтобы указать, какой из них работает для всех браузеров и который требуется для конкретного браузера, включая версии.

Существует огромное количество информации об этой проблеме, но мне еще предстоит найти хорошую ссылку, которая описывает преимущества каждого метода и определяет ли какой-либо конкретный метод API более высокого уровня.

Меня особенно интересует ASP.NET 3.5 SP1, но было бы неплохо получить ответы и на более раннюю версию.

Эта запись в блоге Две важные отличия между Firefox и кэшированием IE описывают некоторые различия в поведении протокола HTTP.

Следующий пример кода иллюстрирует то, что меня интересует

public abstract class NoCacheBasePage : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        DisableClientCaching();
    }

    private void DisableClientCaching()
    {
        // Do any of these result in META tags e.g. <META HTTP-EQUIV="Expire" CONTENT="-1">
        // HTTP Headers or both?

        // Does this only work for IE?
        Response.Cache.SetCacheability(HttpCacheability.NoCache);

        // Is this required for FireFox? Would be good to do this without magic strings.
        // Won't it overwrite the previous setting
        Response.Headers.Add("Cache-Control", "no-cache, no-store");

        // Why is it necessary to explicitly call SetExpires. Presume it is still better than calling
        // Response.Headers.Add( directly
        Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
    }
}

Answer #1

Я собираюсь протестировать добавление тега no-store на наш сайт, чтобы узнать, не влияет ли это на кеширование браузера (иногда Chrome кэшировал страницы). Я также нашел эту статью очень полезной в документации о том, как и почему работает кеширование, и посмотрим на следующий ETag, если нет-магазин не является надежным:

http://www.mnot.net/cache_docs/

http://en.wikipedia.org/wiki/HTTP_ETag


Answer #2

Для чего это стоит, я просто должен был справиться с этим в своем приложении ASP.NET MVC 3. Вот код, который я использовал в файле Global.asax для обработки этого для всех запросов.

    protected void Application_BeginRequest()
    {
        //NOTE: Stopping IE from being a caching whore
        HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        HttpContext.Current.Response.Cache.SetNoStore();
        Response.Cache.SetExpires(DateTime.Now);
        Response.Cache.SetValidUntilExpires(true);
    }

Answer #3

См. Также Как предотвратить google chrome от кеширования моих входов, esp скрытых при нажатии пользователем? без которого Chrome может перезагрузить, но сохранить предыдущий контент элементов <input> - другими словами, используйте autocomplete="off" .


Answer #4

Есть два подхода, о которых я знаю. Первое - сообщить браузеру не кэшировать страницу. Установка ответа на кеш не заботится об этом, однако, поскольку вы подозреваете, что браузер часто игнорирует эту директиву. Другой подход заключается в том, чтобы установить дату вашего ответа на точку в будущем. Я считаю, что все браузеры будут исправлять это до текущего времени, когда они добавят страницу в кеш, но при сравнении будет отображаться страница как новая. Я считаю, что могут быть случаи, когда сравнение не производится. Я не уверен в деталях, и они меняются с каждым новым выпуском браузера. Заключительная записка Мне повезло со страницами, которые «обновляют» себя (другая директива ответа). Обновление кажется менее вероятным из кеша.

Надеюсь, это поможет.





caching