Как очистить ответ HTTP 304 из кэша?
У меня есть ситуация, в которой выпадающий список на моей MVC-странице asp.net заполняется запросом AJAX GET для данных json. Первый запрос возвращает данные с ответом 200 OK. Последующие вызовы возвращают запрос 304 Not Modified, и раскрывающийся список по-прежнему заполнен правильно. Это все хорошо и хорошо.
Однако в другой части моего приложения другой пользователь может изменить содержимое репозитория, из которого возвращаются данные для раскрывающегося списка. Я хочу, чтобы после такой модификации любой последующий запрос других пользователей на данные раскрывающегося списка НЕ возвращал результат 304 Not Modified, а выполнял повторное получение данных.
Как мне этого добиться?
1 ответ
Я всегда полностью отключаю AJAX кеширование. В частности, Internet Explorer может выполнять агрессивное кэширование на AJAX.
Вы можете выполнить интеллектуальное кэширование и проверить, были ли данные изменены, но это было бы нетривиально (по крайней мере, я так думаю, я никогда не пробовал).
Global.asax.cs
protected void Application_BeginRequest()
{
this.DisableAJAXCaching();
}
Extensions.cs
public static void DisableAJAXCaching(this HttpApplication application)
{
/*
* "CACHE ALL THE AJAX REQUESTS"
* - Internet Explorer
*/
if (application.Request.Headers["X-Requested-With"] != null)
{
application.Response.AppendHeader("Expires", "0");
}
}
X-Requested-With
указывает на запрос AJAX. Ваш JS-фреймворк обычно должен поддерживать это.