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

Заголовки кэширования в ASP.NET

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

    protected override void OnLoad(EventArgs e)
    {
        // Set Cacheability...
        DateTime dt = DateTime.Now.AddMinutes(30);
        Response.Cache.SetExpires(dt);
        Response.Cache.SetMaxAge(new TimeSpan(dt.ToFileTime()));

        // Complete OnLoad...
        base.OnLoad(e);
    }

И вот что показывают ответы заголовка:

-----
GET /Pages/Login.aspx HTTP/1.1
Host: localhost:1974
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-lori-time-1: 1244048076221
Cache-Control: max-age=0

HTTP/1.x 200 OK
Server: ASP.NET Development Server/8.0.0.0
Date: Wed, 03 Jun 2009 16:54:36 GMT
X-AspNet-Version: 2.0.50727
Content-Encoding: gzip
Cache-Control: private, max-age=31536000
Expires: Wed, 03 Jun 2009 17:24:36 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 6385
Connection: Close
-----
  • Почему свойство "Cache-Control" отображается дважды?
  • Нужны ли мне свойства "Cache-Control" и "Expires"?
  • Является ли "Page_Load" лучшим местом для размещения этого кода?

Спасибо!

4b9b3361

Ответ 1

Вы также можете добавить эту строку, если вы устанавливаете максимальный возраст, который находится далеко:

// Summary:
// Sets Cache-Control: public to specify that the response is cacheable
// by clients and shared (proxy) caches.    
Response.Cache.SetCacheability(HttpCacheability.Public);

Я делаю много обработки заголовка ответа с документами и изображениями из обработчика файлов, который обрабатывает запросы на файлы, которые сохраняются в БД.

В зависимости от вашей цели вы действительно можете заставить браузеры кэшировать почти всю вашу страницу за несколько дней локально (если это то, что вам нужно/нужно).

изменить:

Я также думаю, что вы можете установить максимальный возраст неправильно...

Response.Cache.SetMaxAge(new TimeSpan(dt.Ticks - DateTime.Now.Ticks ));

этот набор строк составляет 30 минут времени кеширования в локальном браузере [max-age = 1800]

Что касается строк управления 2x Cache, вы можете проверить, установлено ли IIS для автоматического добавления заголовка.

Ответ 2

Я не вижу, что Cache-control появляется дважды. Один из них находится в запросе, один - в ответе. Вероятно, в запросе есть вероятность того, что вы нажмете Shift + F5 в браузере или что-то подобное.

К вашему второму вопросу: это зависит от того, чего вы хотите достичь с заголовками кеша.

Я не знаю, чего вы хотели достичь с максимальным возрастом. Значение слишком высокое, поскольку вы неправильно настроили DateTime на TimeSpan. Почему бы вам просто не использовать TimeSpan.FromMinutes?

Загрузка страницы в порядке. Я обычно общаюсь с HTTP-заголовками.