Before diving into the Symfony application cache, let's familiarize ourselves with the elements that we need to handle in our cache strategies. To do so, open www.wikipedia.org in your browser, inspect any resource with 304 response code, and ponder on request/response headers in the Network tab:
Among the response elements, there are four cache headers that we are interested in the most, Expires and Cache-Control, which will be used for the expiration model, and Etag and Last-Modified, which will be used for the validation model.
Apart from these cache headers, we can have variations of the same cache (compressed/uncompressed) via the Vary header, and we can define a cache as private (accessible by a specific user) or public (accessible by everyone).