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 ...
Get Web Caching now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.