This is indeed an issue, and seems to be specific to Chrome. In my case I was only concerned about a stale page being displayed if it contained a form, and all my forms are submitted using the same AJAX form library that I wrote, so I added this code to run prior to doing the redirect (the redirect is done in JS using window.location = ...
):
//If the user clicks the back button after submitting the form and being redirected,
//Google Chrome redisplays previous entries even if they have since been changed
//(its caching works differently from other browsers).
//This is a (non-foolproof) hack to try to prevent this.
if (window.chrome) {
//This re-requests the page headers for the current page,
//which causes Chrome to clear its cache of the page.
//Unfortunately there appears to be no other client-side way of preventing this caching issue in Chrome.
$.ajax({
url: window.location,
method: 'HEAD'
})
}
Of course it would be much cleaner to just set no-cache headers on the server-side, but I didn't want to do that for all pages, and I didn't want to bother detecting which pages contain forms (or manually setting the cache headers on those pages) just to prevent this issue in Chrome.
I hope there is a better solution, but I haven't found one yet...