如何在Yii2中打开HTTP缓存?

克洛伊

我在控制器中设置了这些值,但无法正常工作。

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'httpCache' => [
          'class' => 'yii\filters\HttpCache',
          'sessionCacheLimiter' => 'public',
          'cacheControlHeader' => 'public, max-age=3600',
        ],
    ];
}

http://www.yiiframework.com/doc-2.0/guide-caching-http.html#cache-control

$ curl -I http://localhost:81/xxxx/web/shopping/search?q=toaster
HTTP/1.1 200 OK
Date: Wed, 11 Nov 2015 08:58:57 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.2d PHP/5.6.12
X-Powered-By: PHP/5.6.12
Set-Cookie: PHPSESSID=t07qapiiv7crdkva14ojn6cvg5; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: search=4ef489ad7fa4567884eebc22279836f85acec05395053c863ed86c2679be9477a%3A2%3A%7Bi%3A0%3Bs%3A6%3A%22search%22%3Bi%3A1%3Bs%3A38%3A%22%2Fxxxx%2Fweb%2Fshopping%2Fsearch%3Fq%3Dtoaster%22%3B%7D; path=/; httponly
Set-Cookie: _csrf=72e0104d312d81ddde455cff7566d3d186e3b25f8f41fc03a1f4a533d9b739ada%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22R1HklhizymwcXPVxJkBCvNR2gBwInqdw%22%3B%7D; path=/; httponly
Content-Type: text/html; charset=UTF-8

由于没有问题的答案,所以我只更新了问题。我发现Yii无法输出所有标头的原因,但我仍然不知道如何打开缓存。实际上,Cache-Control: no-cache即使我要求打开缓存,它现在仍在积极地关闭缓存

即使进行了测试动作,它也会设置no-cache

$ curl -I http://localhost:81/xxxx/web/shopping/test
HTTP/1.1 200 OK
Set-Cookie: PHPSESSID=bvdnd33uu8qj0s88q2sr7n7696; path=/; HttpOnly
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
[...]
php.ini
$ grep cache_limiter  /etc/php5/php.ini
session.cache_limiter = nocache

我发现session_cache_limiter手动调用可以将其输出Cache-Control,但不能输出我设置的值。这可能是一个错误,因为sessionCacheLimiter专门说明了它的作用。

public function behaviors() {
    session_cache_limiter('public');

Cache-Control: public, max-age=10800

当不使用会话时,它仍会设置cookie。这样可以防止我们正在使用的CDN缓存。

Yii版本2.0.6。

拉紧

如果要使用\yii\filters\HttpCache,则应至少设置lastModifiedetagSeed

[
    'class' => 'yii\filters\HttpCache',
    'lastModified' => function ($action, $params) {
        return time();
    },
    'sessionCacheLimiter' => 'public',
    //'cacheControlHeader' => 'public, max-age=3600', // not needed since it is the default value
],

在这里看看:https : //github.com/yiisoft/yii2/blob/2.0.6/framework/filters/HttpCache.php#L111

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章