zoukankan      html  css  js  c++  java
  • Yii2.0http缓存设置

    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] view plain copy
     
    1. <!--?php  
    2. return [  
    3.     'adminEmail' =--> 'admin@example.com',  
    4.     'lastModified'    =>    1472287640,   // 设置自定义变量,用于控制http缓存  
    5. ];  
    其次,在前台控制器层 /advanced/frontend/controllers 中,添加一个控制器 HttpController.php,代码如下:
    [php] view plain copy
     
    1. <!--?php  
    2. namespace frontendcontrollers;  
    3.   
    4. use yiiwebController;  
    5.   
    6. class HttpController extends Controller {  
    7.   
    8.     /* 
    9.      * 使用http缓存的控制器中,必须包含该方法 
    10.      */  
    11.     public function behaviors()  
    12.     {  
    13.         // http缓存配置  
    14.         return [  
    15.                     [  
    16.                         'class' =--> 'yiifiltersHttpCache',  
    17.                         'only' => ['index'],  // 指定http缓存对哪些action生效  
    18.                         'lastModified' => function ($action, $params) {  
    19.             //                 $q = new yiidbQuery();  
    20.             //                 return $q->from('user')->max('updated_at');  
    21.   
    22.             //                 return 1472287616;  
    23.                             return Yii::$app->params['lastModified'];  
    24.   
    25.                         },  
    26.   
    27.                         // 如果采用etagSeed来识别http缓存页面是否变化,就不要用 lastModified, etagSeed操作起来更为灵活,且也适用于非动静分离的场景  
    28.             //            'etagSeed' => function ($action, $params) {   
    29.             //                return // generate ETag seed here  
    30. //                               return (string)($q->from('user')->max('id'));  
    31.             //            }  
    32.                     ],  
    33.         ];  
    34.     }  
    35.   
    36.     /** 
    37.      * http缓存测试 
    38.      */  
    39.     public function actionIndex(){  
    40.         echo time().'<br>';  
    41.         echo Yii::$app->params['lastModified'];  
    42.     }  
    43.   
  • 相关阅读:
    建立表空间和用户
    数据库设计的基本步骤
    ubuntu21.04(linux):安装python3+dlib+face_recognition
    ubuntu21.04(linux):为chrome安装vue-devtools(6.0.0 beta 14)调试插件
    ubuntu21.04(linux):安装node(14.17.1)和vue.js3.1环境
    ubuntu21.04(linux):用apt安装nginx/php/mysql/phpmyadmin(开发环境)
    ubuntu21.04(linux):安装webstorm2021.1
    linux:在fedora 32/ubuntu 21.04安装chrome 90浏览器
    spring boot单元测试之十六:junit5:用@Timeout注解判断测试运行是否超时(spring boot 2.4.4)
    spring boot单元测试之十五:用mockmvc测试返回异步结果的controller(spring boot 2.4.4)
  • 原文地址:https://www.cnblogs.com/liuzhen123/p/8134272.html
Copyright © 2011-2022 走看看