如何从缓存中清除HTTP 304响应?

时间:2013-11-26 16:10:15

标签: ajax http asp.net-mvc-4 http-status-code-304

我有一种情况,我的asp.net MVC页面的下拉列表正在由json数据的AJAX GET请求填充。第一个请求以200 OK响应返回数据。后续调用将返回304 Not Modified请求,并且仍会正确填充下拉列表。这一切都很好。

但是,在我的应用程序的另一部分中,另一个用户可能会修改存储库的内容,从中返回下拉列表的数据。我想要的是,经过这样的修改后,其他用户对下拉列表数据的任何后续请求都不应该返回304 Not Modified结果,而是重新获取数据。

我如何实现这一目标?

1 个答案:

答案 0 :(得分: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框架通常应该支持它。