首页 > 浏览器缓存无效的问题

浏览器缓存无效的问题

我在实验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或者走完代码, 返回数据


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();

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

【热门文章】
【热门文章】