Q:

Does browser continue to send requests for resource even with `Cache-Control: max-age`

I'm reading this great article on caching and there is the following there:

Validators are very important; if one isn’t present, and there isn’t
  any freshness information (Expires or Cache-Control) available, caches
  will not store a representation at all.
The most common validator is the time that the document last changed,
  as communicated in Last-Modified header. When a cache has a
  representation stored that includes a Last-Modified header, it can use
  it to ask the server if the representation has changed since the last
  time it was seen, with an If-Modified-Since request.

So, I'm wondering whether browser continues to send requests (for example HEAD) for a resource even if I specified Cache-Control: max-age=3600? If it doesn't, than what's the point in this header? Is it used after the max-age time passes?

A:

The Cache-Control: max-age=3600 header means that the browser will cache the response for up to 3600 seconds. After that time has passed it may no longer serve the response without first confirming that it is still fresh.
In order to this, the browser can either:

Fetch the full resource with a normal GET request (transfers the whole response body again)
Or perform a revalidation based on an ETag (If-None-Match) or the Last-Modified header (If-Modified-Since), i.e. the client only fetches the response body if it has actually changed. This is of course only possible if the validator was present in the original response.

In short: the reason to use both max-age and a cache validator is to first cache the response for some time and then perform a bandwidth-saving revalidation to confirm the resource's freshness.

