浏览器缓存无效的问题

发布于 2022-08-29 23:43:04 字数 611 浏览 29 评论 0

我在实验PHP设置Cache-Control和Expires来控制浏览器缓存的时候, 无论怎么设置, 浏览器缓存就是不起作用,

1:使用Cache-Control

header('Cache-Control:max-age=120');
echo time();

这种方式每次都还是更新time()

2: 使用Expires
与Cache-Control类似,

    header("Expires: ".gmdate('D d M Y H:i:s ', time()+60*2).' GMT');
    echo time();

同样无法缓存起来

请问这是什么问题。

另外, Cache-Control的max-age如果设置了,比如3600,是不是3600s内浏览器再次访问时都不会再对服务器请求了,而是直接拉本地缓存数据, 还是说请求了, 但返回了一个类似于304的状态码?

在系统默认情况下, 假如是静态文件, 则默认使用Last-Modified缓存方式?
如果是动态PHP文件, 在php代码中, 是不是还要手动的返回304或者走完代码, 返回数据

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野心澎湃 2022-09-05 23:43:04

php header

动态内容是不建议缓存

如果要缓存可以采用一下策略

        if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
        $if_modified_since = preg_replace('/;.*$/', '',   $_SERVER['HTTP_IF_MODIFIED_SINCE']);
    } else {
        $if_modified_since = '';
    }

    $mtime = filemtime($_SERVER['SCRIPT_FILENAME']);
    $gmdate_mod = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';

    if ($if_modified_since == $gmdate_mod) {
        header("HTTP/1.0 304 Not Modified");
        exit;
    }

    header("Last-Modified: $gmdate_mod");
    header('Content-type: text/css');

    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + (60*60*24*45)) . ' GMT');

    echo time();
彼岸花似海 2022-09-05 23:43:04

你需要重新补一下浏览器缓存协商的知识。特别是PHP这种破玩意,啥都得自己来,你必须要明白中间的明确通信细节。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文