A simple HTML code:
<img src="http://someaddr/image.php">
image.php is a script that returns a random Redirect to a static image with all necessary no-cache headers:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Location: http://someaddr/random_image_12345.jpg
The problem: when navigating back and forward to this HTML page, Chrome (latest win/mac) does not revalidate address http://someaddr/image.php
.
I have tried using redirects 302 and also 303 (which in RFC has stronger requirement that it should NEVER been cached by browser). This works like a charm in IE, FireFox, Opera. They always refresh http://someaddr/image.php
. But Chrome doesn't.
I have even used Developer Tools in Chrome, and it seems that in Network Log it even don't shows any attempt (cached or not) of fetching http://someaddr/image.php
. Network Log shows only one connection already to http://someaddr/random_image_12345.jpg
(cached). Why this is so broken...
I know the naive/simple solution of putting query string in image source:
<img src="http://someaddr/image.php?refresh={any random number or timestamp}">
But I don't like/can't use hacks like that. Are there ANY other options?
From a link posted in another question:
You can use HTTP's etags and last modified dates to ensure that you're not sending the browser data it already has cached.
Try a 307 redirect
But if you're stuck trying to get to a link that won't work due to a cached redirect...
This doesn't clear the cache but it's one quick and possible route around it if you're pulling your hair out trying to get to a link that has been redirect cached.
Copy the link address into the address bar and add some GET information to the address.
EXAMPLE If your site is http://example.com
If there is already a ? in the url with some info after it