# Class yii\filters\HttpCache

Inheritance | yii\filters\HttpCache » yii\base\ActionFilter » yii\base\Behavior » yii\base\BaseObject
Implements | yii\base\Configurable
Available since version | 2.0
Source Code | https://github.com/yiisoft/yii2/blob/master/framework/filters/HttpCache.php

HttpCache implements client-side caching by utilizing the `Last-Modified` and `ETag` HTTP headers.

It is an action filter that can be added to a controller and handles the `beforeAction` event.

To use HttpCache, declare it in the `behaviors()` method of your controller class. In the following example the filter will be applied to the `index` action and the Last-Modified header will contain the date of the last update to the user table in the database.

    public function behaviors()
    {
        return [
            [
                'class' => 'yii\filters\HttpCache',
                'only' => ['index'],
                'lastModified' => function ($action, $params) {
                    $q = new \yii\db\Query();
                    return $q->from('user')->max('updated_at');
                },
    //            'etagSeed' => function ($action, $params) {
    //                return // generate ETag seed here
    //            }
            ],
        ];
    }

## Public Properties

Hide inherited properties

Property | Type | Description | Defined By
--- | --- | --- | ---
$cacheControlHeader | string | The value of the `Cache-Control` HTTP header. | yii\filters\HttpCache
$enabled | boolean | A value indicating whether this filter should be enabled. | yii\filters\HttpCache
$etagSeed | callable | A PHP callback that generates the ETag seed string. | yii\filters\HttpCache
$except | array | List of action IDs that this filter should not apply to. | yii\base\ActionFilter
$lastModified | callable | A PHP callback that returns the UNIX timestamp of the last modification time. | yii\filters\HttpCache
$only | array | List of action IDs that this filter should apply to. | yii\base\ActionFilter
$owner | yii\base\Component|null | The owner of this behavior | yii\base\Behavior
$params | mixed | Additional parameters that should be passed to the $lastModified and $etagSeed callbacks. | yii\filters\HttpCache
$sessionCacheLimiter | string | The name of the cache limiter to be set when [session_cache_limiter()](https://secure. | yii\filters\HttpCache
$weakEtag | boolean | Whether to generate weak ETags. | yii\filters\HttpCache

## Public Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
__call() | Calls the named method which is not a class method. | yii\base\BaseObject
__construct() | Constructor. | yii\base\BaseObject
__get() | Returns the value of an object property. | yii\base\BaseObject
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\BaseObject
__set() | Sets value of an object property. | yii\base\BaseObject
__unset() | Sets an object property to null. | yii\base\BaseObject
afterAction() | This method is invoked right after an action is executed. | yii\base\ActionFilter
afterFilter() |  | yii\base\ActionFilter
attach() | Attaches the behavior object to the component. | yii\base\ActionFilter
beforeAction() | This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action. | yii\filters\HttpCache
beforeFilter() |  | yii\base\ActionFilter
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\BaseObject
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\BaseObject
className() | Returns the fully qualified name of this class. | yii\base\BaseObject
detach() | Detaches the behavior object from the component. | yii\base\ActionFilter
events() | Declares event handlers for the $owner's events. | yii\base\Behavior
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\BaseObject
hasProperty() | Returns a value indicating whether a property is defined. | yii\base\BaseObject
init() | Initializes the object. | yii\base\BaseObject

## Protected Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
generateEtag() | Generates an ETag from the given seed string. | yii\filters\HttpCache
getActionId() | Returns an action ID by converting yii\base\Action::$uniqueId into an ID relative to the module. | yii\base\ActionFilter
isActive() | Returns a value indicating whether the filter is active for the given action. | yii\base\ActionFilter
sendCacheControlHeader() | Sends the cache control header to the client. | yii\filters\HttpCache
validateCache() | Validates if the HTTP cache contains valid content. | yii\filters\HttpCache

## Property Details

$cacheControlHeader public property

The value of the `Cache-Control` HTTP header. If null, the header will not be sent.

See also http://tools.ietf.org/html/rfc2616#section-14.9.

public string $cacheControlHeader = 'public, max-age=3600'
$enabled public property

A value indicating whether this filter should be enabled.

public boolean $enabled = true
$etagSeed public property

A PHP callback that generates the ETag seed string. The callback's signature should be:

    function ($action, $params)

where `$action` is the yii\base\Action object that this filter is currently handling; `$params` takes the value of $params. The callback should return a string serving as the seed for generating an ETag.

public callable $etagSeed = null
$lastModified public property

A PHP callback that returns the UNIX timestamp of the last modification time. The callback's signature should be:

    function ($action, $params)

where `$action` is the yii\base\Action object that this filter is currently handling; `$params` takes the value of $params. The callback should return a UNIX timestamp.

See also http://tools.ietf.org/html/rfc7232#section-2.2.

public callable $lastModified = null
$params public property

Additional parameters that should be passed to the $lastModified and $etagSeed callbacks.

public mixed $params = null
$sessionCacheLimiter public property

The name of the cache limiter to be set when session_cache_limiter() is called. The default value is an empty string, meaning turning off automatic sending of cache headers entirely. You may set this property to be `public`, `private`, `private_no_expire`, and `nocache`. Please refer to session_cache_limiter() for detailed explanation of these values.

If this property is `null`, then `session_cache_limiter()` will not be called. As a result, PHP will send headers according to the `session.cache_limiter` PHP ini setting.

public string $sessionCacheLimiter = ''
$weakEtag public property (available since version 2.0.8)

Whether to generate weak ETags.

Weak ETags should be used if the content should be considered semantically equivalent, but not byte-equal.

See also http://tools.ietf.org/html/rfc7232#section-2.3.

public boolean $weakEtag = false

## Method Details

beforeAction() public method

This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action.

public boolean beforeAction ( $action )
$action | yii\base\Action | The action to be executed.
return | boolean | Whether the action should continue to be executed.

generateEtag() protected method

Generates an ETag from the given seed string.

protected string generateEtag ( $seed )
$seed | string | Seed for the ETag
return | string | The generated ETag

sendCacheControlHeader() protected method

Sends the cache control header to the client.

See also $cacheControlHeader.

protected void sendCacheControlHeader ( )

validateCache() protected method

Validates if the HTTP cache contains valid content.

If both Last-Modified and ETag are null, returns false.

protected boolean validateCache ( $lastModified, $etag )
$lastModified | integer | The calculated Last-Modified value in terms of a UNIX timestamp. If null, the Last-Modified header will not be validated.
$etag | string | The calculated ETag value. If null, the ETag header will not be validated.
return | boolean | Whether the HTTP cache is still valid.