我将我网站的背景图像设置为服务器上的一个 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);
使用 last-modified 标题字段并将其始终设置为过去的日期。
这样,浏览器将从您的服务器收到“未修改”回复,并将使用图像的缓存版本。
我建议添加一个标头来告知图像文件上次修改的日期:
header("Last-Modified: " . gmdate("D, d M Y H:i:s", filemtime($image)) . " GMT");
header("Content-type: $mime");
$image = readfile($image);
imagejpeg($image);
这样浏览器将能够缓存图像。