$ajax请求挂起 - Chrome缓存问题?

5
请查看底部更新内容。
在Chrome中执行跨域jQuery.ajax GET请求时,我遇到了一些问题。
预请求非常慢(最多达到20秒),而在Firefox中却很快。
我尝试了不同的提示(例如启用异步),但是我无法解决问题。响应是一个JSON对象数组,而且非常小(只有几个字节)。
问题似乎仅出现在第一次调用上。我编写了一个执行再次请求的函数。它由成功处理程序执行。在第12秒的最短延迟后,请求正常执行。
我已经尝试使用不同版本的jQuery(因为这是我第一次使用2.0.3)。
我记录了服务器。如我所料,选项请求在最多20秒内未被执行。没有服务器问题。服务器根据延迟精确识别命令并执行GET方法。
对于一个加载于2014-01-11 14:59:00的页面,我的日志输出如下:
2014-01-11 14:59:14 - log.txt - "OPTIONS /unit/IO/*?_=1389452340572 HTTP/1.1" 200 -
2014-01-11 14:59:14 - log.txt - "GET /unit/IO/*?_=1389452340572 HTTP/1.1" 200 -
2014-01-11 14:59:14 - log.txt - "OPTIONS /unit/IO/*?_=1389452340573 HTTP/1.1" 200 -
2014-01-11 14:59:14 - log.txt - "GET /unit/IO/*?_=1389452340573 HTTP/1.1" 200 -

这是我的ajax调用:
$.ajax({
url: <<crossdomain>>,
type: 'GET',
contentType:'application/json',
async:true,
    cache:false,
beforeSend: function (request)
    {
    request.setRequestHeader("Authorization", 'Basic ' + encodedData);
},         
success: function(response) {
        alert(response)
}
});

请求头(Chrome):

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:accept, authorization, content-type
Access-Control-Request-Method:GET
Cache-Control:max-age=0
Connection:keep-alive
DNT:1
Host:<<crossdomain>>
Origin:<<thisdomain>>
Referer:<<directpathonthisdomain>>
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36

响应头(Chrome):

Access-Control-Allow-Headers:Authorization
Access-Control-Allow-Headers:Accept
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Headers:Accept-Language
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Type:application/json
Date:Sat, 11 Jan 2014 13:28:32 GMT
Server:Python3.2

这是第一次通话的网络流量:
Chrome:
OPTION
DNS Lookup: 0 ms
Connecting: 3 ms
**Waiting: 17.44s**
Receiving 2 ms

GET

DNS Lookup: 0 ms
Connecting: 2 ms
Sending: 0 ms
Waiting: 46 ms
Receiving 1 ms

作为对比,以下是Firefox的日志:

选项

DNS Lookup: 0 ms
Waiting: 10 ms
Receiving 5 ms

GET

DNS Lookup: 0 ms
Waiting: 41 ms
Receiving 3 ms

编辑: 如果我直接打开HTML文件(file://)而不是在本地/远程服务器上进行托管,则没有问题。

编辑2: 在Chrome的无痕模式下可以工作-可能是缓存问题?


我也遇到了这个问题。就像你说的,在无痕模式和Firefox中它可以正常工作。希望有人能提供一个解释/解决方案。 - kevinAlbs
嗨,Kevin,我仍在寻找解决方案。该问题也出现在Chrome的最新金丝雀版本中。 - user1532132
你已经找到解决方案了吗?我甚至尝试了一个简单的XMLHttpRequest() -> 结果相同。 - user1532132
很遗憾,我只是使用隐身模式下的Chrome作为解决方法。 - kevinAlbs
2个回答

7

我遇到了同样的问题。在Chrome浏览器的高级设置中禁用"预测网络操作以提高页面加载性能"选项后,延迟问题解决了。


0
也许你可以在你的ajax请求中添加下一个头部。
headers: {
    "Cache-Control" : "no-cache, no-store, must-revalidate",
    "Pragma": "no-cache",
    "Expires", "0"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接