Varnish 4 And Symfony Caching Strategy
Details to come...
- We have decided to only support the Cache-Control headers because "expires" is out-dated.
- Varnish will only cache a response if the Cache-Control header is public.
- The Age header is how long varnish has had the object in cache. If the value were 60, this would mean that 60 seconds has passed, since it was first cached.
For a detailed expolnation of Cache-Control headers.
"Public" tells Varnish that it's ok to cache, vs "private", which means only the browser can cache it. If "public" is sent without max-age or s-maxage headers, varnish will cache the request for the default ttl of 3600 seconds.
Cache in the Browser and Varnish.
This will cached in the bowser and Varnish for 1 minute.
$response->setMaxAge(60); Cache-Control:max-age=60, public
Cache in the Browser different from Varnish.
This will cached in the bowser for 1 minute and Varnish for 5 minutes.
$response->setMaxAge(60); $response->setSharedMaxAge(300); Cache-Control:max-age=60, public, s-maxage=300
Cache only in Varnish.
This will cached in the bowser for 0 minute and Varnish for 1 minutes.
$response->setSharedMaxAge(60); Cache-Control:public, s-maxage=60
Cache only in the broswer.
This will cached in the bowser for 1 minute and Varnish for 0 minutes. This is because private tells Varnish not to cache it.
$response->setMaxAge(60); $response->setPrivate(); Cache-Control:max-age=60, private
Grace mode allows you to instruct Varnish to keep an object in cache beyond its TTL and serve this stale content if your backend is not healthy or if fresh content hasn’t been fetched yet.