如何在浏览器上控制页面缓存?

  • 回答 (2)
  • 关注 (0)
  • 查看 (84)

"调查显示,并非所有浏览器都以统一的方式遵守http cache指示。

出于安全原因,我们不希望在我们的应用程序做某些网页缓存。至少适用于以下浏览器:

Internet Explorer 6+

Firefox 1.5+

Safari 3+

Opera 9+

Chrome

从网站注销后,可以自动清楚缓存页面"

HERO坑货HERO坑货提问于
死者是小智回答于

做了一点研究,找到了一个小小的demo,测试了一下,结果很奏效。这里是:

header('Cache-Control: no-store, private, no-cache, must-revalidate');     // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false);  // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');                  // Date in the past  
header('Expires: 0', false); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header ('Pragma: no-cache');

这应该工作。问题是,当设置头两次相同的部分,如果false没有作为头函数的第二个参数发送,头函数将简单地覆盖以前的header()调用。所以,在设置时Cache-Control,例如,如果不想把所有参数放在一个header()函数调用中,他必须这样做:

header('Cache-Control: this');
header('Cache-Control: and, this', false);
嗝屁软件工程回答于

发现web.config路线有用(试图将其添加到答案,但似乎并没有被接受,所以发布在这里)

<configuration>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
            <!-- HTTP 1.1. -->
            <add name="Pragma" value="no-cache" />
            <!-- HTTP 1.0. -->
            <add name="Expires" value="0" />
            <!-- Proxies. -->
        </customHeaders>
    </httpProtocol>
</system.webServer>

这里是express / node.js的做法:

app.use(function(req, res, next) {
    res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
    res.setHeader('Pragma', 'no-cache');
    res.setHeader('Expires', '0');
    next();
});

所属标签

可能回答问题的人

  • 找虫虫

    0 粉丝0 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问4 回答
  • 爸爸

    腾讯 · 客户端安全 (已认证)

    3 粉丝4 提问4 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问4 回答

扫码关注云+社区

领取腾讯云代金券