【发布时间】:2012-11-13 06:07:30
【问题描述】:
一个简单的 HTML 代码:
<img src="http://someaddr/image.php">
image.php 是一个脚本,它返回一个随机重定向到具有所有必要的无缓存标头的静态图像:
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Location: http://someaddr/random_image_12345.jpg
问题:来回导航到此 HTML 页面时,Chrome(最新 win/mac)不会重新验证地址 http://someaddr/image.php。
我尝试过使用重定向 302 和 303(在 RFC 中有更严格的要求,即它不应该被浏览器缓存)。这就像 IE、FireFox、Opera 中的魅力一样。他们总是刷新http://someaddr/image.php。但 Chrome 没有。
我什至在 Chrome 中使用过开发者工具,而且似乎在网络日志中它甚至没有显示任何获取 http://someaddr/image.php 的尝试(缓存与否)。网络日志仅显示一个与http://someaddr/random_image_12345.jpg 的连接(缓存)。怎么这么破……
我知道将查询字符串放入图像源的天真/简单的解决方案:
<img src="http://someaddr/image.php?refresh={any random number or timestamp}">
但我不喜欢/不能使用这样的技巧。还有其他选择吗?
【问题讨论】:
-
你试过
Expires: -1吗?还要将no-store添加到编译指示 -
过期:-1,对 Chrome 没有影响。
-
我对 chrome 的研究更加深入。我在页面上制作了一个 JavaScript,它动态地将
插入到页面内容中。即使在这种情况下,Chrome 也拒绝连接到源 src URL。
-
似乎
no-store而不是no-cache可以解决问题。你看看这个:stackoverflow.com/questions/4146813/… -
我尝试了单个“no-store”、“no-store”和“no-cache”的不同组合。似乎没有任何效果。
标签: google-chrome caching redirect