我在实验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这种破玩意,啥都得自己来,你必须要明白中间的明确通信细节。