HTTP Cache¶
The HttpCacheServiceProvider provides support for the Symfony Reverse Proxy.
Parameters¶
- http_cache.cache_dir: The cache directory to store the HTTP cache data.
- http_cache.options (optional): An array of options for the HttpCache constructor.
Services¶
Registering¶
$app->register(new Mascot\Provider\HttpCacheServiceProvider(), array(
'http_cache.cache_dir' => __DIR__.'/cache/',
));
Usage¶
Mascot already supports any reverse proxy like Varnish out of the box by setting Response HTTP cache headers:
use Symfony\Component\HttpFoundation\Response;
$app->get('/', function() {
return new Response('Foo', 200, array(
'Cache-Control' => 's-maxage=5',
));
});
Tip
If you want Mascot to trust the X-Forwarded-For* headers from your
reverse proxy at address $ip, you will need to whitelist it as documented
in Trusting Proxies.
If you would be running Varnish in front of your application on the same machine:
use Symfony\Component\HttpFoundation\Request;
Request::setTrustedProxies(array('127.0.0.1', '::1'));
$app->run();
This provider allows you to use the Symfony reverse proxy natively with
Mascot applications by using the http_cache service. The Symfony reverse proxy
acts much like any other proxy would, so you will want to whitelist it:
use Symfony\Component\HttpFoundation\Request;
Request::setTrustedProxies(array('127.0.0.1'));
$app['http_cache']->run();
The provider also provides ESI support:
$app->get('/', function() {
$response = new Response(<<<EOF
<html>
<body>
Hello
<esi:include src="/included" />
</body>
</html>
EOF
, 200, array(
'Surrogate-Control' => 'content="ESI/1.0"',
));
$response->setTtl(20);
return $response;
});
$app->get('/included', function() {
$response = new Response('Foo');
$response->setTtl(5);
return $response;
});
$app['http_cache']->run();
If your application doesn’t use ESI, you can disable it to slightly improve the overall performance:
$app->register(new Mascot\Provider\HttpCacheServiceProvider(), array(
'http_cache.cache_dir' => __DIR__.'/cache/',
'http_cache.esi' => null,
));
Tip
To help you debug caching issues, set your application debug to true.
Symfony automatically adds a X-Symfony-Cache header to each response
with useful information about cache hits and misses.
If you are not using the Symfony Session provider, you might want to set
the PHP session.cache_limiter setting to an empty value to avoid the
default PHP behavior.
Finally, check that your Web server does not override your caching strategy.
For more information, consult the Symfony HTTP Cache documentation.