我遇到了缓存ajax响应的一些问题。
我设法得到一个小的测试用例,可以重现我遇到的问题。
我在Firefox 44.0.2,Chrome 48.0.2564.116 m,Opera 35.0.2066.92和Edge 25.10586.0.0中进行了测试
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core-compat.js"></script>
<script>
var Call1 = new Request({
url: 'Ajax.php',
onSuccess: function(){
setTimeout(function(){
var Call2 = new Request({
url: 'Ajax.php'
});
Call2.setHeader('Accept-Language', 'fr-FR');
Call2.get();
}, 1000);
}
});
Call1.setHeader('Accept-Language', 'en-GB');
Call1.get();
</script>
</head>
</html>
<?php
header('Cache-Control: max-age=3600');
header('Expires: ' . date('D, d M Y H:i:s T', time() + 3600));
header('Last-Modified: ' . date('D, d M Y H:i:s T', time()));
header('Vary: Accept-Language');
$headers = getallheaders();
echo $headers['Accept-Language'];
这些ajax响应不会在页面访问之间缓存。他们总是会点击Ajax.php,甚至不会发送if-modified-since
标题。
当我将请求的Accept-Language
标头更改为相同的语言时,它会在页面访问之间缓存请求。所以它似乎根本不会起作用。
当我确实有不同的Accept-Language
标头但不发回Vary标头时,它也会缓存响应。但是缓存的响应始终是第一个,因为它在缓存时不会考虑Accept-Language
标头。
有人知道这是浏览器问题还是我做错了什么?
提前致谢。
PS:我知道按F5也会重新请求ajax请求,按url栏中的enter不会。