我正在将我的网站的背景图像设置为服务器上的url,这是一个php脚本,它将图像作为输出。这是它的代码:
//$mime is usually image/jpeg, etc
header("Content-type: $mime");
$image = readfile($image);
imagejpeg($image);
问题是,每次我加载页面时,图像似乎都会再次加载,而不是缓存。对此我能做些什么吗,例如发送一个标头来缓存图像?
我总是使用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);
使用上次修改的标题字段,并始终将其设置为过去的日期。
这样,浏览器将收到来自服务器的"未修改"回复,并将使用图像的缓存版本。
我建议添加一个标题来告诉图像文件上次修改的日期:
header("Last-Modified: " . gmdate("D, d M Y H:i:s", filemtime($image)) . " GMT");
header("Content-type: $mime");
$image = readfile($image);
imagejpeg($image);
通过这种方式,浏览器将能够缓存图像。