这是一些示例代码。连续制作四个xmlhttprequests()到同一个url。在这种情况下,我预计有四个请求会有四个不同的响应,因为在这种情况下,URL会在每次调用时返回一个新的UUID。在Chrome 18,Firefox和Safari中,会发生这种情况。Chrome 19中的XMLHttpRequest行为有所不同 - '欺骗'请求?
在Chrome中19,但是,只有一个请求会在电线上,但浏览器的行为如同所有四项要求以相同的值返回。也就是说,回调被执行四次,但每次都有相同的响应文本。开发人员工具和Wireshark都确认实际上只有一个请求。我认为这可能与浏览器缓存行为有关,但是同时使用客户端(杂注:无缓存)和服务器端(缓存控制:无缓存)没有帮助。为每个请求添加一个不同的伪造查询参数会强制它做出所有四个实际的请求,但我仍然好奇什么改变了,以及处理它的另一种方式可能是什么(除了URL参数)。我也怀疑自己在做一些奇怪或错误的事情,因为我无法找到其他人在谈论这件事。
<!doctype HTML>
<script>
function doOne(i) {
var xh = new XMLHttpRequest();
xh.open("GET", "/uuid", true);
xh.setRequestHeader("pragma", "no-cache");
xh.onreadystatechange = function() {
if (xh.readyState == 4) {
var p = document.createElement('p');
p.innerHTML = xh.responseText;
document.body.appendChild(p);
}
}
xh.send(null);
}
window.onload = function() {
for (var i = 0; i < 4; i++) {
doOne(i);
}
}
</script>
供参考,在这里是我使用的是什么这个测试情况下,例如服务器(web.py):
#!/usr/bin/env python
import uuid
import web
urls = (
'/uuid', 'Uuid',
)
class Uuid():
def GET(self):
web.header('Cache-Control', 'no-cache');
return str(uuid.uuid1())
app = web.application(urls, globals())
if __name__ == '__main__':
app.run()
试着发送下一个全部响应(服务器)的报头_“没有缓存” _。 'Cache-Control:no-cache','Date:GMT current time here' _(例如,Date:Thu,2012年5月17日05:44:24 GMT)_,'Expires:-1','Pragma:no -cache' –
@AndrewD。感谢您的评论;编译指示:no-cache用于请求,而不是响应,在示例代码中,我将它设置为请求。对于缓存控制,我也尝试了无存储,这没有帮助。 – slowslowslow
'pragma'可以同时用于:请求和响应。你也可以简单地检查它:在谷歌上找到一些东西,然后在网络选项卡上检查FF firebug或Chrome DevTools。通过'Cache-Control:no-cache'寻求响应。在所有使用'Cache-Control:no-cache'的响应中,你都可以看到'Pragma:no-cache'。 –