Laravel标题和缓存在php中
发布时间:2020-12-14 19:44:03 所属栏目:大数据 来源:网络整理
导读:我有一个小图像生成器作为我的laravel4应用程序的一部分.生成图像大约需要700毫秒,因此我已经开始在服务器上缓存生成的结果并将其返回到浏览器,这节省了一些时间. 由于图像在生成后永远不会改变,我想告诉浏览器在本地缓存图像,我使用以下代码完成了此操作:
我有一个小图像生成器作为我的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',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,未在其他人中测试过)仍然拒绝简单地获取本地缓存版本,而是再次点击服务器. 我花了大约半个小时寻找关于这个主题的其他问题,所有这些问题都给了我答案,我已将其纳入上述代码中.因此,虽然我知道有类似的问题,但这个问题对于上述源代码是独一无二的. 我的问题是,我做错了什么会导致文件没有被浏览器缓存? 解决方法
另一种方法是检查’If-Modified-Since’请求标头,因为只有在浏览器已有文件时才会出现.
如果它存在,那么您知道该文件已经创建并且可以使用指向它的链接进行响应,否则运行上面的代码.像这样…… // check if the client validating cache and if it is current if ( isset( $headers['If-Modified-Since'] ) && ( strtotime( $headers['If-Modified-Since'] ) == filemtime( $image->get_full_path() ) ) ) { // cache IS current,respond 304 header( 'Last-Modified: ' . $image->get_last_modified(),true,304 ); } else { // not cached or client cache is older than server,respond 200 and output header( 'Last-Modified: ' . $image->get_last_modified(),200 ); header( 'Content-Length: ' . $image->get_filesize() ); header( 'Cache-Control: max-age=' . $image->get_expires() ); header( 'Expires: '. gmdate('D,d M Y H:i:s GMT',time() + $image->get_expires() ) ); header( 'Content-Type: image/jpeg'); print file_get_contents( $image->get_full_path() ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |