IE9 кеширует динамические страницы - PullRequest
2 голосов
/ 12 мая 2011

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

  • Часто изменяющееся содержимое остается неизменным
  • Пользователь посещает авторизованный контент, затем выходит из системы, затем пытается вернуться к защищенному контенту и получает его из кэша!

Я пытался отключить кеш с помощью

<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

но пока не повезло ...

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Я только что столкнулся с этим в разработке MVC.

Я хотел отключить кэширование всех AJAX-запросов на стороне сервера.

Для этого я зарегистрировал следующий глобальный фильтр.

public class AjaxCacheControlAttribute:  ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
            filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
            filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            filterContext.HttpContext.Response.Cache.SetNoStore();
        }
    }
}
1 голос
/ 12 мая 2011

Вы интенсивно используете AJAX? Убедитесь, что каждый запрос AJAX уникален, иначе IE9 будет обслуживать кэшированную версию ответа на запрос.

Например, если URL-адрес вашего запроса AJAX обычно выглядит следующим образом: http://www.mysite.com/ajax.php?species=dog&name=fido

Вместо этого добавляйте уникальное значение к каждому запросу, чтобы IE не просто использовал кэшированный ответ. Самый простой способ сделать это в Javascript - это переменная, которая увеличивается каждый раз, когда вы делаете запрос:

var request_id = 0;

var request_url = "http://www.mysite.com/ajax.php?species=dog&name=fido&request_id="+request_id;
request_id++;
0 голосов
/ 12 мая 2011

Попробуйте

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

Также требуется чтение: http://support.microsoft.com/kb/234067

...