Картинка блога

При работе с ASP.NET часто требуется запретить кеширование страниц браузером. Под страницами тут можно понимать любой ответ с сервера. Будь то HTML, AJAX XHR, картинка или любой другой файл.
Задача сводится к добавлению в ответ определенных заголовков, позволяющих управлять кешем.

Page.Load

Самый простой пример, это добавить следующий код в Page.Load или любое другое событие Page.

void Page_Load(Object sender, EventArgs e)
{
Response.AppendHeader(«Cache-Control», «no-cache; private; no-store; must-revalidate; max-stale=0; post-check=0; pre-check=0; max-age=0»); // HTTP 1.1
Response.AppendHeader(«Pragma», «no-cache»); // HTTP 1.1
Response.AppendHeader(«Keep-Alive», «timeout=3, max=993»); // HTTP 1.1
Response.AppendHeader(«Expires», «Mon, 26 Jul 1997 05:00:00 GMT»); // HTTP 1.1
}

В этом случае запрос будет всегда послан на сервер для этой страницы.
Второй случай подходит для тех классов, где нет явного доступа к текущему классу HttpResponse. В этом случае можно использовать свойство HttpContext.Current:

HttpContext.Current.Response.Expires = 0;
HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now;
HttpContext.Current.Response.AddHeader(«pragma», «no-cache»);
HttpContext.Current.Response.AddHeader(«cache-control», «private»);
HttpContext.Current.Response.CacheControl = «no-cache»;

Последний подход широко используется в модулях (HttpModule) и хендлерах (HttpHandler) или как в моем случае — в контроллере (Controller) ASP.NET MVC.

Метки:, ,

2 комментария в “Кеширование ASP.NET страниц браузером.”

  1. Вот такой вот простой способ:

    Response.Cache.SetCacheability(HttpCacheability.NoCache);

  2. < % // prevent caching (asp classic jscript) Response.CacheControl = "no-cache"; Response.AddHeader("Pragma", "no-cache"); Response.Expires = -1; %>