16. Yii 2.0 http缓存

Yii 2.0 的 http缓存是基于http协议的,只对 GET 请求生效。
应用场景:如果我们的web服务器采用动静分离的技术,即客户端的页面请求只请求html页面框架(静态数据),而客户端的数据请求(动态数据)通过Ajax请求来实现,那么我们就可以将静态数据利用http缓存来实现。

http缓存的原理:
如果开启了http缓存,客户端浏览器请求服务器时,会给服务器发送一个 If-Modified-Since(时间戳,包含在请求消息头中),服务器会将该时间戳与自身的   lastModified(也是一个时间戳)的值进行比较:
如果二者的值一致,服务器就会直接给浏览器响应一个状态行(304 Not Modified),告诉浏览器请求的页面没有变化,这样浏览器就会从自身的缓存中取出页面呈现给用户;
如果二者的值不一致,服务器就会给浏览器响应一个 lastModified(时间戳,包含在响应消息头中),同时把最新的页面响应给客户端浏览器,浏览器再把这个页面呈现给用户。

当然,我们也可以用  etagSeed 代替 lastModified,原理类似,但 etagSeed 操作起来更加灵活,它也适合于非动静分离的场景。

http缓存利用的是客户端浏览器的缓存,故不需要服务器端缓存介质的支持。

这里以 Yii 2.0 高级版为例,介绍http缓存。

操作http缓存的类文件为  /advanced/vendor/yiisoft/yii2/filters/HttpCache.php

首先,修改前台的变量配置文件  /advanced/frontend/config/params.php,配置一个 lastModified 变量,代码如下:

    
     'admin@example.com',
    'lastModified'    =>    1472287640,   // 设置自定义变量,用于控制http缓存
];
其次,在前台控制器层  /advanced/frontend/controllers 中,添加一个控制器 HttpController.php,代码如下:

   
    'yii\filters\HttpCache',
                        'only' => ['index'],  // 指定http缓存对哪些action生效
                        'lastModified' => function ($action, $params) {
            //                 $q = new \yii\db\Query();
            //                 return $q->from('user')->max('updated_at');

            //                 return 1472287616;
                            return \Yii::$app->params['lastModified'];

                        },

                        // 如果采用etagSeed来识别http缓存页面是否变化,就不要用 lastModified, etagSeed操作起来更为灵活,且也适用于非动静分离的场景
            //            'etagSeed' => function ($action, $params) { 
            //                return // generate ETag seed here
//                               return (string)($q->from('user')->max('id'));
            //            }
                    ],
        ];
    }

    /**
     * http缓存测试
     */
    public function actionIndex(){
        echo time().'
'; echo \Yii::$app->params['lastModified']; } }
最后,在浏览器中输入  http://yii.frontend.com/?r=http/index,并打开web控制台调试工具,查看效果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值