在Firefox 3中,每个域的答案是6:只要触发到同一个域的第7个XmlHttpRequest(在任何选项卡上),它就会排队,直到其他6个完成 .
其他主流浏览器的数字是多少?
此外,有没有办法绕过这些限制而不让我的用户修改他们的浏览器设置?例如,jsonp请求的数量是否有限制(使用脚本标记注入而不是XmlHttpRequest对象)?
背景:我的用户可以从网页向服务器发出XmlHttpRequests,要求服务器在远程主机上运行ssh命令 . 如果远程主机关闭,ssh命令将花费几分钟时间失败,最终阻止我的用户执行任何进一步的命令 .
8 回答
对于流行的浏览器,Browserscope的网络结果将为您提供 Connections per Hostname 和 Max Connections . 通过对用户"in the wild,"运行测试来收集数据,以便它保持最新 .
使用IE6 / IE7,可以调整注册表中的并发请求数 . 以下是如何将其设置为四个 .
我刚刚使用www.browserscope.org和IE9和Chrome 24进行了检查,您可以将6个并发连接到单个域,最多可以连接17个到多个域 .
根据HttpWatch博客上的IE 9 – What’s Changed?,IE9在通过VPN时仍然有2个连接限制 .
我写了一个文件AJAX测试器 . 好好享受!!!仅仅因为我的托管服务提供商遇到了问题
Edit:
r表示行和w等待时间 .
当你最初按下开始按钮80(或任何其他数量)的并发ajax请求是由javascript启动时,但众所周知它们是由浏览器假脱机 . 它们也被并行地请求服务器(限于某个数字,这是这个问题的事实) . 这里请求在服务器端解决,具有随机延迟(由w Build ) . 在开始时,计算解决所有ajax调用所需的所有时间 . 测试完成后,您可以看到它占用了总时间的一半,占了三分之一,花了四分之一等,扣除了对服务器调用的并行性 . 这不是严格的,也不是精确的,但很高兴能够实时看到ajaxs调用是如何完成的(看到传入的交叉) . 并且是一个非常简单的自包含脚本来显示ajax基础知识 .
当然,这假设服务器端没有引入任何额外限制 .
最好与萤火虫网面板(或您的浏览器相当)一起使用
可用于增加并发连接数的一个技巧是托管来自不同子域的图像 . 这些将被视为单独的请求,每个域将被限制为并发最大值 .
IE6,IE7 - 限制为2 . 如果你有宽带,IE8是6 - 2(如果它是拨号) .
写了我自己的测试 . 测试了stackoverflow上的代码,工作正常告诉我chrome / FF可以做6
它适用于大多数可以在不同时间触发即时更改事件的网站 . (又名:潮红)
我注意到我的node.js服务器上必须输出至少1025个字节来触发事件/刷新 . 否则事件会在请求完成时立即触发所有三个状态,所以这是我的后端:
更新
我注意到,如果同时使用xhr和fetch api,现在最多可以有2x请求
我相信浏览器会对同一个域进行最大数量的并发http请求,这取决于用户的设置和浏览器,大约为4-8个请求 .
您可以设置您的请求以转到不同的域,这可能是也可能是不可行的 . 雅虎人在这方面做了很多研究,你可以阅读(here) . 请记住,您添加的每个新域都需要DNS查找 . YSlow的人建议在2到4个域之间实现并行请求和DNS查找之间的良好折衷,尽管这主要关注页面的加载时间,而不是后续的AJAX请求 .
我可以问你为什么要这样做很多请求?浏览器限制对同一域的请求数有充分的理由 . 如果可能的话,你最好捆绑请求 .