我正在将我的网站的背景图像设置为服务器上的URL,这是一个php脚本,它将图像作为输出。这是代码:
//$mime is usually image/jpeg, etc
header("Content-type: $mime");
$image = readfile($image);
imagejpeg($image);
问题是,每次加载页面时,图像似乎都会被加载而不是被缓存。有什么我可以做的,例如发送一个标题来缓存图像吗?
答案 0 :(得分:4)
我总是使用ETag(一个md5
哈希)和Last-Modified(过去的日期,通常是在创建文件时)获得最佳结果。
代码就是这样:
$etag = md5_file($image);
$lastModified = gmdate('D, d M Y H:i:s', filemtime($image)) . ' GMT';
header("Content-type: $mime");
header("ETag: \"{$etag}\"");
header("Last-Modified: $lastModified");
header('Expires: ' . gmdate("D, d M Y H:i:s", ((60*60*24*45)+strtotime($lastModified)))); // add 45 days expire
$image = readfile($image);
imagejpeg($image);
答案 1 :(得分:1)
使用上次修改的标题字段并始终将其设置为过去的日期。
这样浏览器就会收到服务器的“未修改”回复,并会使用图片的缓存版本。
答案 2 :(得分:1)
我建议添加一个标题来告诉上次修改图像文件的日期:
header("Last-Modified: " . gmdate("D, d M Y H:i:s", filemtime($image)) . " GMT");
header("Content-type: $mime");
$image = readfile($image);
imagejpeg($image);
这样浏览器就可以缓存图像了。