Forcing a Cache to Refresh
One of the tradeoffs of caching is that you may occasionally
receive stale data. What can you do if you believe (or know)
that a cache has given you stale data? You need some way to
refresh or validate the data received from the cache. HTTP
provides a couple of mechanisms for doing just that. Clients
can generate requests with Cache-control
directives, the two most common of which are
no-cache and max-age.
We’ll discuss no-cache first because it
has been around the longest.
The no-cache Directive
The no-cache directive notifies a cache
that it cannot return a cached copy. Even if a fresh
copy of the response—with a specific expiration
time—is in the cache, the client’s request must be
forwarded to the origin server.
RFC 2616 calls such a request an
“end-to-end validation” (Section 14.9.4). The
no-cache directive is sent when
you click on the Reload button on your
browser. In an HTTP request, it looks like this:
GET /index.html HTTP/1.1 Cache-control: no-cache
Recall that the Cache-control header
does not exist in the HTTP/1.0 standard. Instead, HTTP/1.0
clients use a Pragma header for the
no-cache directive:
Pragma: no-cache
no-cache is the only
directive defined for the Pragma
header in RFC 1945.
For
backwards compatibility, RFC 2616 also defines the
Pragma header. In fact, many of the
recent HTTP/1.1 browsers still use Pragma
for the no-cache directive instead of the
newer Cache-control.
Note that the no-cache directive does not necessarily require the ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access