Как очистить ответ 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-фреймворк обычно должен поддерживать это.

Другие вопросы по тегам