【问题标题】:OutputCache directive not working in Asp.NetOutputCache 指令在 Asp.Net 中不起作用
【发布时间】:2011-12-29 21:41:00
【问题描述】:

我在我的 asp.net 页面 (asp.net 4.0) 中添加了一个 outputcache 指令:

        <%@ OutputCache Duration="3600" Location="Client" VaryByParam="None" %>

但是,这似乎不起作用。当我检查 http 标头信息时,我看到:

        HTTP/1.1 200 OK => 
        Cache-Control => no-cache, no-store
        Pragma => no-cache
        Content-Type => text/html; charset=utf-8
        Expires => -1
        Server => Microsoft-IIS/7.0
        X-AspNet-Version => 4.0.30319
        Set-Cookie => ASP.NET_SessionId=0txhgxrykz5atrc3a42lurn1; path=/; HttpOnly
        X-Powered-By => ASP.NET
        Date => Tue, 15 Nov 2011 20:47:28 GMT
        Connection => close
        Content-Length => 17428

以上显示未应用 OutputCache 指令。我什至从代码隐藏中尝试过这个:

        this.Response.Cache.SetExpires(DateTime.Now.AddHours(1.0));
        TimeSpan ds = new TimeSpan(0, 1, 0, 0);
        this.Response.Cache.SetMaxAge(ds);

上面的代码应该和OutputCache指令的结果一样,但是当我检查http头信息时,我可以看到它仍然没有被应用。

基本上,这里的目的是确保当用户单击后退按钮并登陆我的页面时,不会从服务器检索该页面。我想避免出现要求用户“重新发送”的浏览器弹出窗口。我希望浏览器只使用它在缓存中的页面副本。

感谢您的任何帮助。

【问题讨论】:

  • 那个浏览器弹窗与缓存无关...

标签: asp.net html http caching


【解决方案1】:

根据您的问题:

我想避免让浏览器弹出询问用户 '重发。'我希望浏览器只使用它拥有的页面副本 在它的缓存中。

如果浏览器要求您重新发送数据,则表示该内容是对 POST 请求的响应。

根据RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1

某些 HTTP 方法必须导致缓存使实体无效。这是 Request-URI 或 Location
引用的实体 或 Content-Location 标头(如果存在)。这些方法是:

  • 删除
  • 发布

因此,要使缓存起作用,您需要将 POST 转换为 GET。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多