加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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() ); 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读