要实现固定时间内访问输出304,需要使用HTTP缓存机制。具体步骤如下:
设置响应头:在PHP脚本的开头使用header()函数设置响应头,包括Cache-Control、Expires和Last-Modified等字段。
判断是否需要更新:在每次请求时,先判断客户端是否已经缓存了该资源,如果已经缓存,则比较客户端缓存的Last-Mod> ified时间和服务器端的Last-Modified时间是否一致,如果一致,则输出304 Not Modified响应,否则输出新的资源>> 内容和新的Last-Modified时间。
下面是示例代码:
// 设置响应头
header('Cache-Control: max-age=3600, public');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($filename)) . ' GMT');
// 判断是否需要更新
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$last_modified_time = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
$current_modified_time = filemtime($filename);
if ($last_modified_time == $current_modified_time) {
// 输出304 Not Modified响应
header('HTTP/1.1 304 Not Modified');
exit;
}
}
// 输出新的资源内容
readfile($filename);
在上面的代码中,设置了Cache-Control、Expires和Last-Modified等响应头字段,用于控制缓存的过期时间和缓存的有效性。在判断是否需要更新时,使用了HTTP请求头中的If-Modified-Since字段,用于比较客户端缓存的Last-Modified时间和服务器端的Last-Modified时间是否一致。如果一致,则输出304 Not Modified响应,否则输出新的资源内容和新的Last-Modified时间。
评论 (0)