Key CDN has an article on it. They certainly would have experience and expertise there. I didn't read the whole thing, but it seems to have it covered: https://www.keycdn.com/blog/http-cache-headers
There's also some interesting exceptions where rules aren't followed. Like browsers typically have a completely separate cache for favicons. I suppose because they use the icons in funny/different ways, like bookmarks.
There are also sometimes proxies (especially corporate MITM ones) that don't follow the rules. Hence the popularity of cache-busting parameters like you described.
Your options are probably:
a) redirect to a different URL as you've done by appending stuff to it
b) require revalidation on each request, recipies shown by other posters
c) POST to the url you want refreshed; post isn't cachable. Note that you can't redirect to POST somewhere else, but you can do it with javascript.
d) use XHR to force a request as another poster mentioned.
Not saying its the right option, but it is an option.
It's a very tricky balance between origin server load and consistency. By deciding to use HTTP cache you agree to eventual consistency and this decision comes with its upsides and downsides.
There has been a proposal in 2007 for a thing called cache channels. It defined a mechanism for an origin server to expose a feed which caches would poll at an interval. The feed would list resources that have gone stale since the last query. This mechanism in conjunction with conditional GET requests would've solved part of the issue of hinting browsers to invalidate their local resources.
Sounds like what you want (presuming your server handles 304 logic correctly)
From a performance perspective though, people on good internet might be dominated by RTT so a 304 might be almost as expensive as a full 200.
It hasn't changed. Those two URLs are still cached completely independently by the user agent. The ?time=... cache busting trick is meant to produce a cache key that's never been used before, thus requiring a fresh request. The new request doesn't clean up the cache entries for the old URLs; it just doesn't use them. That's one reason it's better to use etag and such to make the caches work properly, rather than fight them with this trick.
On many servers, if new.html is a static file, the same entity is produced regardless of parameters. But the user agent doesn't know this.
For example, let's say I've already cached the page /new.html
Now, I click a button which triggers a change to the page, and I am redirected back to it.
Even though the page has changed, and the browser should see a new timestamp in the header if pinging the server, it just doesn't seem to happen.
Has anyone dealt with this before? I tried to ask on StackOverflow, but lately my questions don't seem to get any attention, and I've run out of reputation to spend on bounties.