Difference between Ctrl+Refresh and Ctrl+Shift+Refresh?

Solution 1:

Both are identical to the browser on the local machine. The headers you mentioned are the only difference.

The Ctrl+Refresh header means that any caching servers along the way should return a fresh copy of the page.

The Ctrl+Shift+Refresh headers mean that any caching servers along the way should return a fresh copy of the page, and should also not cache the page for any future requests. In other words, the next time the page is requested, it should either use a previous cache of the page or request a fresh copy, but should not use this one.

Pragma: no-cache is the HTTP 1.0 version of Cache-Control: no-cache. There is no HTTP 1.0 equivalent to Cache-Control: max-age=0.

RFC2616 section 14 subsection 9 has relevant information: w3c.org: RFC2616 sec 14.9.1

Solution 2:

There is another difference, and a big one at that.

When you hit Ctrl+Refresh, for every cached object that has a Last-Modified or ETag header, the browser will issue a request with an If-Modified-Since or If-None-Match header. The server may then choose to respond with a 304 Not Modified, without re-sending any data (assuming the data is, in fact, not modified).

When you hit Ctrl+Shift+Refresh, the browser won't issue such conditional If-* headers, leaving the server no option but to send the data again.