【问题标题】:How to clear an HTTP 304 response from cache?如何从缓存中清除 HTTP 304 响应?
【发布时间】:2013-12-11 21:32:26
【问题描述】:

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

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

我如何做到这一点?

【问题讨论】:

  • 我的回答是否遗漏了您想知道的任何内容?
  • 你的回答没有回答我的问题。我实际上喜欢响应被缓存的事实。但我需要知道如何清除这个缓存。实际上,您的声明“您可以进行智能缓存并检查数据是否已被修改,但这并非易事(至少我认为是这样,我从未尝试过)。”暗示我想知道的。
  • 我认为这对于 SO 的答案来说太宽泛了。也许如果您尝试实现这样的功能并且遇到某个问题,您可以在这里寻求帮助,但在这里寻求完整的从头到尾的指南是题外话。

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


【解决方案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 框架通常应该支持它。

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多