Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制缓存控制:在F5重新加载时通过XMLHttpRequest在Chrome中没有缓存_Javascript_Ajax_Google Chrome_Caching - Fatal编程技术网

Javascript 强制缓存控制:在F5重新加载时通过XMLHttpRequest在Chrome中没有缓存

Javascript 强制缓存控制:在F5重新加载时通过XMLHttpRequest在Chrome中没有缓存,javascript,ajax,google-chrome,caching,Javascript,Ajax,Google Chrome,Caching,我希望确保通过AJAX调用请求的数据是新鲜的,而不是缓存的。因此,我发送头缓存控制:无缓存 但是如果用户按F5,我的Chrome版本33将使用缓存控制:max age=0覆盖此标题 例如。将test.html与内容一起放在Web服务器上 <script> var xhr = new XMLHttpRequest; xhr.open('GET', 'test.html'); xhr.setRequestHeader('Cache-Control', 'no-ca

我希望确保通过AJAX调用请求的数据是新鲜的,而不是缓存的。因此,我发送头
缓存控制:无缓存

但是如果用户按F5,我的Chrome版本33将使用
缓存控制:max age=0
覆盖此标题

例如。将
test.html
与内容一起放在Web服务器上

<script>
    var xhr = new XMLHttpRequest;
    xhr.open('GET', 'test.html');
    xhr.setRequestHeader('Cache-Control', 'no-cache');
    xhr.send();
</script>

var xhr=新的XMLHttpRequest;
open('GET','test.html');
setRequestHeader('Cache-Control','no-Cache');
xhr.send();
在网络选项卡上的chrome调试器中,我看到test.html AJAX调用。状态代码200。现在按F5重新加载页面。存在最大年龄:0,状态代码304未修改

Firefox也表现出类似的行为。只需覆盖请求头,它就会将其修改为缓存控制:无缓存,F5上的最大年龄=0


我可以不显示吗?

另一种方法是在url中附加一个唯一的数字

<script>
    var xhr = new XMLHttpRequest;
    xhr.open('GET', 'test.html?_=' + new Date().getTime());
    //xhr.setRequestHeader('Cache-Control', 'no-cache');
    xhr.send();
</script>

var xhr=新的XMLHttpRequest;
open('GET','test.html?='+new Date().getTime());
//setRequestHeader('Cache-Control','no-Cache');
xhr.send();

时间戳不是很独特,但它应该对您的用例足够独特。

由于多种原因,使用查询字符串进行缓存控制现在不是您的最佳选择,并且(仅)中提到了一些。他甚至解释了版本控制的新标准方法。如果您只是想设置请求头,正确的方法是:

//通过缓存控制头:
setRequestHeader(“缓存控制”,“无缓存,无存储,最大年龄=0”);
//IE和旧浏览器的回退:
xhr.setRequestHeader(“到期”,“1980年1月1日星期二1:00:00 GMT”);
setRequestHeader(“Pragma”,“无缓存”);
希望这对将来的任何人都有帮助。

我尝试了(但失败了)对URL进行某种随机化,但没有成功,因为我正在访问的文件(.json)也被缓存

http.setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");
我的解决方案是在对json文件名的调用中添加一个时间戳(类似于上面的方法,稍加修改)。这对我来说非常有效(下面的代码片段)


我对这一切都很陌生,所以我确信这不是一个标准/正确的解决方案是有原因的,但它对我有效。

这不是真的@wadim所以Chrome和Firefox不尊重RFC2616(现在是7234)?请注意,这个答案是一个社区维基,所以如果你觉得它不能充分回答这个问题,请随时更新它。我没有时间重新访问它。在某些情况下,对于相同API端点的请求,最好使用相同的url。我认为这个答案还不包括那个案例???@chanp正确,它不包括那个案例。这种情况只能通过标题来解决,但ChromeV33覆盖了其中一些标题。。。所以是的,goodluck:)注意:
expires
如果设置了
max age
,则不需要
expires
<代码>后检查=0和
预检查=0
不需要()
必须重新验证
不能用于客户端()。它们可能不是必需的,但是有一些较旧的浏览器会忽略一些其他的头,在这种情况下,它们会启动来完成这项工作(我自己用crossbrowsertesting.com对此进行了测试)。虽然我不能保证
必须重新验证
,因为我对它不太了解,只是因为杀伤力太大而把它扔了进去。另一个解决方案(如果可能的话)是使用“POST”http请求,因为浏览器从不缓存POST请求。
doSomething('files/data.json?nocache=' + (new Date()).getTime(), function(text){...