我有一个小型图像生成器作为我的 laravel4 应用程序的一部分。生成图像大约需要 700 毫秒,因此我已经开始在我的服务器上缓存生成的结果并将其返回到浏览器,从而节省了一些时间。
由于图像一旦生成就永远不会改变,我想告诉浏览器在本地缓存图像,我使用以下代码完成了此操作:
$path = $cacheFolderPath . $cacheFileName;
if (File::exists( $path )){
$response = Response::make(File::get($path));
$response->header('Content-Type', 'image/png');
$response->header('Content-Disposition', 'inline; filename="'.$cacheFileName.'"');
$response->header('Content-Transfer-Encoding', 'binary');
$response->header('Cache-Control', 'public, max-age=10800, pre-check=10800');
$response->header('Pragma', 'public');
$response->header('Expires', date(DATE_RFC822,strtotime(" 2 day")) );
$response->header('Last-Modified', date(DATE_RFC822, File::lastModified($path)) );
$response->header('Content-Length', filesize($path));
return $response;
}
这会将带有状态代码的图像发送200 OK
到具有以下标头的浏览器:
Cache-Control:max-age=10800, pre-check=10800, public
Connection:Keep-Alive
Content-Disposition:inline; filename="pie_0_normal.png"
Content-Length:2129
Content-Transfer-Encoding:binary
Content-Type:image/png
Date:Wed, 07 Aug 2013 10:29:20 GMT
Expires:Fri, 09 Aug 13 10:29:20 +0000
Keep-Alive:timeout=5, max=93
Last-Modified:Wed, 07 Aug 13 10:14:42 +0000
Pragma:public
Server:Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
Set-Cookie:laravel_session=767487mhf6j2btv3k01vu56174; expires=Wed, 07-Aug-2013 12:29:20 GMT; path=/; httponly
X-Powered-By:PHP/5.4.7
我的问题是我的浏览器(chrome,未在其他浏览器中测试)仍然拒绝简单地获取本地缓存版本,而是再次访问服务器。
我花了大约半个小时来寻找关于这个主题的其他问题,所有这些问题都给了我答案,我将这些答案纳入了上述代码。所以虽然我知道有类似的问题,但这个问题是上述源代码所独有的。
我的问题是,我做错了什么会导致浏览器不缓存文件?