在Firefox 3中,答案是每一個域6個:觸發到同一個域的第7個XmlHttpRequest(在任何選項卡上)後,就會排隊,直到其餘6個完成之一。 node
其餘主要瀏覽器的數量是多少? chrome
另外,是否有方法能夠繞過這些限制而無需讓個人用戶修改其瀏覽器設置? 例如,對jsonp請求(使用腳本標記注入而不是XmlHttpRequest對象)的數量有限制嗎? express
背景:個人用戶能夠從網頁向服務器發出XmlHttpRequest,要求服務器在遠程主機上運行ssh命令。 若是遠程主機關閉,則ssh命令須要幾分鐘的時間才能失敗,最終使個人用戶沒法執行任何其餘命令。 json
我剛剛經過www.browserscope.org進行了檢查,並使用IE9和Chrome 24進行了檢查,您能夠將6個併發鏈接到單個域,最多將17個併發鏈接到多個域。 後端
編寫了我本身的測試。 測試了stackoverflow上的代碼,效果很好,告訴我chrome / FF能夠作到6 api
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);
我注意到若是同時使用xhr和fetch api,您如今最多能夠有2x個請求 網絡
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(); });
Browserscope的網絡結果將爲您提供流行主機的每一個主機名鏈接數和最大鏈接數。 經過「野外」對用戶運行測試來收集數據,所以它將保持最新狀態。 併發
您能夠用來增長併發鏈接數量的一個技巧是託管來自另外一個子域的圖像。 這些將被視爲單獨的請求,每一個域都將限制爲併發最大值。
IE6,IE7-不得超過兩個。 若是您有寬帶,則IE8爲6-若是是寬帶則爲2。
我相信瀏覽器將向同一域發出的併發http請求數量上限,根據用戶的設置和瀏覽器,該請求的數量大約爲4-8個。
您能夠將請求設置爲轉到不一樣的域,這多是可行的,也多是不可行的。 雅虎人在這方面作了不少研究,您能夠在此處閱讀有關內容。 請記住,您添加的每一個新域也都須要DNS查找。 YSlow的專家建議在2至4個域之間實現並行請求和DNS查找之間的良好折衷,儘管這主要是針對頁面的加載時間,而不是後續的AJAX請求。
請問您爲何要提出這麼多請求? 瀏覽器有充分的理由將請求數量限制到同一域。 若是可能,最好將請求捆綁在一塊兒。