在Firefox 3中,答案是每个域6个:只要触发同一个域的第7个XmlHttpRequest(在任何选项卡上),它就会排队,直到其他6个完成为止。

其他主要浏览器的数字是多少?

此外,是否有办法绕过这些限制而不让用户修改浏览器设置?例如,jsonp请求(使用脚本标记注入而不是XmlHttpRequest对象)的数量是否有限制?

背景:我的用户可以从web页面到服务器进行xmlhttprequest,要求服务器在远程主机上运行ssh命令。如果远程主机宕机,ssh命令会在几分钟后失效,最终阻止用户执行任何进一步的命令。


当前回答

我刚刚检查了www.browserscope.org和IE9和Chrome 24,你可以有6个并发连接到一个域,最多17到多个域。

其他回答

Browserscope的网络结果将为您提供每个主机名的连接数和流行浏览器的最大连接数。数据是通过对“野外”用户运行测试来收集的,因此它将保持最新。

编写我自己的测试。在stackoverflow上测试了代码,工作良好,告诉我chrome/FF可以做6

var change = 0;
var simultanius = 0;
var que = 20; // number of tests

Array(que).join(0).split(0).forEach(function(a,i){
    var xhr = new XMLHttpRequest;
    xhr.open("GET", "/?"+i); // cacheBust
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 2){
            change++;
            simultanius = Math.max(simultanius, change);
        }
        if(xhr.readyState == 4){
            change--;
            que--;
            if(!que){
                console.log(simultanius);
            }
        }
    };
    xhr.send();
});

它适用于大多数可以在不同时间触发就绪状态改变事件的网站。(又名:冲洗)

我注意到在我的node.js服务器上,我必须输出至少1025字节来触发事件/刷新。否则事件会在请求完成时立即触发所有三个状态,下面是我的后端:

var app = require('express')();

app.get("/", function(req,res) {
    res.write(Array(1025).join("a"));
    setTimeout(function() {
        res.end("a");
    },500);
});

app.listen(80);

更新

我注意到,你现在可以有多达2x的请求,如果你同时使用xhr和获取api

var change = 0; var simultanius = 0; var que = 30; // number of tests Array(que).join(0).split(0).forEach(function(a,i){ fetch("/?b"+i).then(r => { change++; simultanius = Math.max(simultanius, change); return r.text() }).then(r => { change--; que--; if(!que){ console.log(simultanius); } }); }); Array(que).join(0).split(0).forEach(function(a,i){ var xhr = new XMLHttpRequest; xhr.open("GET", "/?a"+i); // cacheBust xhr.onreadystatechange = function() { if(xhr.readyState == 2){ change++; simultanius = Math.max(simultanius, change); } if(xhr.readyState == 4){ change--; que--; if(!que){ document.body.innerHTML = simultanius; } } }; xhr.send(); });

根据IE 9 -什么改变了?在HttpWatch博客上,IE9在VPN上仍然有2个连接限制。

使用VPN仍然会破坏IE 9的性能 我们之前报道过 关于上限的缩减 IE的并发连接数 8当你的PC使用VPN连接时。 这种情况即使发生在浏览器 交通没有经过那里 连接。 不幸的是,IE 9受到VPN的影响 以同样的方式连接:

增加并发连接数量的一个技巧是将映像驻留在不同的子域。这些将被视为单独的请求,每个域将被限制为并发的最大值。

IE6, IE7 -有两个限制。IE8是6,如果你有宽带- 2(如果是拨号上网)。

在IE6 / IE7中,用户可以调整注册表中的并发请求数量。下面是如何设置为四个。

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPerServer"=dword:00000004
"MaxConnectionsPer1_0Server"=dword:00000004