Apache使一些AJAX请求同步运行

Apache使一些AJAX请求同步运行,ajax,apache,jquery,apache2,Ajax,Apache,Jquery,Apache2,我有一个奇怪的问题,有时如果我连续快速地向Apache2.2服务器发出两个AJAX请求,第二个请求将等待第一个请求完成,然后再完成 例如,我有两个请求,一个休眠10秒,另一个立即返回。如果我运行立即返回的请求,它将始终在300ms内返回。但是,如果我调用需要10秒的请求,然后调用立即返回的请求,则第二个请求将等待大约50%的时间,直到第一个请求完成,chrome将在收到响应前10秒报告该请求。另一半时间,快速请求将立即返回 我找不到任何模式使其以这种或那种方式运行,它只是偶尔会随机地阻止快速AJ

我有一个奇怪的问题,有时如果我连续快速地向Apache2.2服务器发出两个AJAX请求,第二个请求将等待第一个请求完成,然后再完成

例如,我有两个请求,一个休眠10秒,另一个立即返回。如果我运行立即返回的请求,它将始终在300ms内返回。但是,如果我调用需要10秒的请求,然后调用立即返回的请求,则第二个请求将等待大约50%的时间,直到第一个请求完成,chrome将在收到响应前10秒报告该请求。另一半时间,快速请求将立即返回

我找不到任何模式使其以这种或那种方式运行,它只是偶尔会随机地阻止快速AJAX请求,而其他时候它会按照预期的方式运行。我在一个只有我在访问的dev服务器上工作,并且我已经将maxrequestsprchild等几个变量设置为一个高值

有人知道为什么Apache看起来是随机的,将我的AJAX请求转换为同步请求吗

以下是我正在运行的代码:

$.ajax({async:true,dataType:'json',url:'/progressTest',success:function(d){console.log('FINAL',d)}}); // Sleeps for 10 seconds
$.ajax({async:true,dataType:'json',url:'/progressTestStatus',success:function(d){console.log('STATUS',d)}}); // Takes ~300ms
下面是两个屏幕截图。第一个进程按预期运行,第二个进程先等待慢进程完成(在示例中,超时设置为3秒)


更新:根据下面的评论-这似乎与Chrome一次只执行一个请求有关。你知道为什么Chrome会对异步请求设置如此低的限制吗?

问题不在于Apache,而在于Google Chrome限制了对开发服务器的并发请求数量。我只能猜测为什么它只限于一个请求。以下是几点:

1) 你打开了很多标签吗?并发连接的总数是有限制的,如果您有许多选项卡使用KeepAlive发出请求,您可能处于该限制,并且只能建立一个到服务器的连接。如果是这种情况,您可以通过将KeepAlive添加到您自己的输出标题中来解决这个问题


2) 您是否启用了一些扩展。一些扩展对浏览器做了一些奇怪的事情。尝试禁用所有扩展并发出相同的请求。如果可行,那么让他们一次只能找到一个罪魁祸首扩展。

这也可能是Chrome(可能不是Apache)。浏览器一次只能发出如此多的请求(尽管通常超过2个)。是否有其他文件(如一些背景图像)同时被下载?您可能看到了流水线(这可能是浏览器正在做的事情)。使用Wireshark查看网络流量,确保在等待服务器响应时,Chrome会为每个请求打印“(待定)”。但是我会用时间戳来测试请求是否在同一时间被打开,事实上,第二个请求的时间戳要高出10秒。显然,铬元素一次只能使用1种。为什么AJAX请求的数量如此之低?Chrome肯定是个问题。我关闭了所有其他选项卡,问题有所好转,但并没有完全消失(可能是因为扩展仍然启用)。尽管如此,还是要感谢Paul帮我找出原因。