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'];
- }
-
- }