ajax - Apache 使一些 AJAX 请求同步运行

标签 ajax apache jquery apache2

我遇到一个奇怪的问题,有时如果我快速连续向 Apache 2.2 服务器发出两个 AJAX 请求,第二个请求将等待第一个请求完成后再完成。

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

我找不到任何模式让它以某种方式表现,它有时会随机阻止快速 AJAX 请求,有时它会按预期表现。我正在开发一个只有我可以访问的开发服务器,并且我已将 MaxRequestsPerChild 等多个变量设置为较高的值。

有人知道为什么 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 秒)。

Expected async behavior

Async behavior

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

最佳答案

问题不在于 Apache,而在于 Google Chrome 限制了对开发服务器的并发请求数量。我只能猜测为什么它仅限于一个请求。这里有一些:

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

2) 您是否启用了一些扩展。有些扩展会对浏览器做出奇怪的事情。尝试禁用所有扩展并发出相同的请求。如果有效,则一次启用一个,以找到罪魁祸首的扩展程序。

关于ajax - Apache 使一些 AJAX 请求同步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923616/

相关文章:

Jquery animate div 不透明度滚动

php - 使用 jquery 和 php 检查登录表单并显示错误消息

javascript - $ ('#textboxId' ).val() 返回旧值(浏览器缓存问题)

linux - 如何在另一个文件夹中重命名 Webdav 文件夹

linux - Amazon Linux AMI 上没有可用的包 httpd

jquery - 将高度 100% 设置为绝对 div

jquery - 在ajax成功函数中接收.csv文件作为数据

ajax - 具有 SEO 友好的 ajax 和历史记录的单页网站

macos - XAMPP 控制面板未在 Mac 上显示

javascript - 如何在 iOS 上注册 <input type=date> 的值更改事件