Директива OutputCache не работает в Asp.Net - PullRequest
3 голосов
/ 16 ноября 2011

Я добавил директиву outputcache на свою страницу asp.net (asp.net 4.0) следующим образом:

        <%@ OutputCache Duration="3600" Location="Client" VaryByParam="None" %>

Однако, похоже, это не работает. Когда я проверяю информацию заголовка http, я вижу это:

        HTTP/1.1 200 OK => 
        Cache-Control => no-cache, no-store
        Pragma => no-cache
        Content-Type => text/html; charset=utf-8
        Expires => -1
        Server => Microsoft-IIS/7.0
        X-AspNet-Version => 4.0.30319
        Set-Cookie => ASP.NET_SessionId=0txhgxrykz5atrc3a42lurn1; path=/; HttpOnly
        X-Powered-By => ASP.NET
        Date => Tue, 15 Nov 2011 20:47:28 GMT
        Connection => close
        Content-Length => 17428

Выше показано, что директива OutputCache не была применена. Я даже попробовал это из codebehind:

        this.Response.Cache.SetExpires(DateTime.Now.AddHours(1.0));
        TimeSpan ds = new TimeSpan(0, 1, 0, 0);
        this.Response.Cache.SetMaxAge(ds);

Приведенный выше код должен иметь те же результаты, что и директива OutputCache, но когда я проверяю информацию заголовка http, я вижу, что она все еще не применяется.

По сути, цель здесь - убедиться, что когда пользователь нажимает кнопку «Назад» и попадает на мою страницу, страница не будет извлечена с сервера. Я хочу, чтобы браузер не отображал всплывающее окно с запросом на повторную отправку. Я хочу, чтобы браузер просто использовал копию страницы, которая находится в его кэше.

Спасибо заранее за любую помощь.

1 Ответ

3 голосов
/ 16 ноября 2011

Из вашего вопроса:

Я хочу избежать появления всплывающего окна браузера, которое просит пользователя 'Отправить.' Я хочу, чтобы браузер просто использовал копию страницы, которая у него есть в кеше.

Если браузер запрашивает повторную отправку данных, это означает, что содержимое было ответом на запрос POST.

Согласно RFC 2616 - Протокол передачи гипертекста - HTTP / 1.1 :

Некоторые методы HTTP ДОЛЖНЫ приводить к тому, что кеш делает недействительной сущность. Это либо объект, указанный в Request-URI, либо в Location
или заголовки Content-Location (если есть). Эти методы:

  • PUT
  • DELETE
  • POST

Итак, чтобы кеш работал, вам нужно преобразовать POST в GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...