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 变量,代码以下:
- <!--?php
- return [
- 'adminEmail' =--> 'admin@example.com',
- 'lastModified' => 1472287640,
- ];
其次,在前台控制器层 /advanced/frontend/controllers 中,添加一个控制器 HttpController.php,代码以下:
- <!--?php
- namespace frontend\controllers;
-
- use yii\web\Controller;
-
- class HttpController extends Controller {
-
-
- public function behaviors()
- {
-
- return [
- [
- 'class' =--> 'yii\filters\HttpCache',
- 'only' => ['index'],
- 'lastModified' => function ($action, $params) {
-
-
-
-
- return \Yii::$app->params['lastModified'];
-
- },
-
-
-
-
-
- ],
- ];
- }
-
-
- public function actionIndex(){
- echo time().'<br>';
- echo \Yii::$app->params['lastModified'];
- }
-
- }