ブラウザでの最大並列http接続?


465

HTTPサーバーへの接続を一時停止しています(comet、reverse ajaxなど)。それは問題なく動作しますが、ブラウザは特定のドメインへの2つの中断された接続のみを同時に許可することを確認します。したがって、ユーザーがブラウザーのタブ1で私のWebサイトを表示していて、それをタブ2にもロードしようとすると、私のサイトへの2つの許可された接続を使い果たしてしまいます。

私はいくつかのワイルドカードドメインのことを行うことができると思います。この場合、httpサーバーに次のように私のサイトへのアドレスを解決させます。

*.example.com/webapp  -> 192.0.2.1 (the actual ip of my server)

そう:

a.example.com/webapp
b.example.com/webapp
c.example.com/webapp

すべてはまだ(www.example.com/webapp)を指していますが、ブラウザーはそれらを異なるドメインと見なすため、2つの接続制限に遭遇しません。これは本当ですか?

それ真実であっても、すべてのドメインにわたって、ブラウザごとのアクティブな接続の数に制限はありますか?上記のスキームを使用するとします-たとえば、Firefoxは常に24の並列接続しか許可しませんか?何かのようなもの:

1) a.example.com/webapp
2) www.download.example/hugefile.zip
3) b.example.com/webapp
4) c.example.com/webapp
...
24) x.example.com/webapp
25) // Error - all 24 possible connections currently in use!

例として24接続/ Firefoxを選択しました。



3
はい、それはドメインシャーディングと呼ばれ、HTTP / 2の時代には時代遅れの戦略です
Jeff Puckett 2017年

ここでの解決策は、すべてのタブ更新に対して一時停止された接続を1つだけにすることです。タブが開かれると、そのタブの更新要求がサーバーに送信され、タブはメインの中断された接続で更新をリッスンし、関心のある接続のみを取得します。尋ねているが、誰かにとってそれが役に立つかもしれないと思った。:-)
クレイゴ

回答:


418

サーバー/プロキシごとのデフォルトの同時永続的接続の最大数:

Firefox 2:  2
Firefox 3+: 6
Opera 9.26: 4
Opera 12:   6
Safari 3:   4
Safari 5:   6
IE 7:       2
IE 8:       6
IE 10:      8
Chrome:     6

制限はサーバー/プロキシごとなので、ワイルドカードスキームが機能します。

参考:これは特にHTTP 1.1に関連しています。他のプロトコルには、個別の懸念と制限があります(つまり、SPDY、TLS、HTTP 2)。


41
びっくりしました。HTTP 1.1 RFCは永続的な接続をサーバーごとに2つに制限するように言っていませんか?
エイドリアン・マッカーシー

53
はい、そうです。最近のブラウザーはもう準拠していません。
アルシエンデ2010

38
これらの制限の引用?
AJ。

19
オリジンごとのWebSockets接続に制限はありますか?
Mitar

13
サーバーごとの2接続の制限がHTTP 1.1 RFCから削除されました:evertpot.com/http-11-updated
Florian Winter

195

HTTP / 1.1

IE 6 and 7:      2
IE 8:            6
IE 9:            6
IE 10:           8
IE 11:           8
Firefox 2:       2
Firefox 3:       6
Firefox 4 to 46: 6
Opera 9.63:      4
Opera 10:        8
Opera 11 and 12: 6
Chrome 1 and 2:  6
Chrome 3:        4
Chrome 4 to 23:  6
Safari 3 and 4:  4

出典:http : //p2p.wrox.com/book-professional-website-performance-optimizing-front-end-back-end-705/

HTTP / 2(SPDY)

Multiplexed support(one single TCP connection for all requests)


1
オペレーティングシステムレベルでより低い値に制限されている場合、ブラウザーは本当にこれらの高い値を使用できますか?ブラウザはOS設定を上書きできますか?:Windowsで、あなたは、いくつかのレジストリ設定この記事で述べたように、サーバーごとの最大接続を制御(MaxConnectionsPerServerとMaxConnectionsPer1_0Server)持っていると同じようにstackoverflow.com/questions/2960056/...
RBT

これは.NETプログラミング固有の問題であることが判明しました。とにかく、サードパーティのブラウザーは独自のHTTPサポートを実装しているため、Windowsの制限による影響を受けません。
thomasrutter

したがって、Webブラウザーはホストごとに複数のTCP(約6並列)接続を開いてHTTP 1.1で異なるリソースをより速くロードするのが一般的であるため、多重化は1つのTCPで同じ速度を得るので、HTTP / 2ではこれは当てはまりません。接続?
ステファン

118
 BrowserVersion | ConnectionsPerHostname | MaxConnections
----------------------------------------------------------
 Chrome34/32    | 6                      | 10
 IE9            | 6                      | 35
 IE10           | 8                      | 17
 IE11           | 13                     | 17
 Firefox27/26   | 6                      | 17
 Safari7.0.1    | 6                      | 17
 Android4       | 6                      | 17
 ChromeMobile18 | 6                      | 16
 IE Mobile9     | 6                      | 60

最初の値はConnectionsPerHostnameで、2番目の値はMaxConnectionsです。

出典:http : //www.browserscope.org/?category=network&v=top

注:ConnectionsPerHostnameは、ブラウザーが同じドメインに対して行う同時http要求の最大数です。同時接続数を増やすために、さまざまなドメインでリソース(画像など)をホストできます。ただし、MaxConnectionsを超えることはできません 。つまり、すべてのドメインで、ブラウザーが開く接続の最大数です。

2020年の更新

ブラウザごとの並列接続の数

| Browser              | Connections per Domain         | Max Connections                |
| -------------------- | ------------------------------ | ------------------------------ |
| Chrome 81            | 6 [^note1]                     | 256[^note2]                    |
| Edge 18              | *same as Internet Explorer 11* | *same as Internet Explorer 11* |
| Firefox 68           | 9 [^note1] or 6 [^note3]       | 1000+[^note2]                  |
| Internet Explorer 11 | 12 [^note4]                    | 1000+[^note2]                  |
| Safari 13            | 6 [^note1]                     | 1000+[^note2]                  |
  • [^ note1]:72リクエスト、1ドメイン(127.0.0.1)でテスト
  • [^ note2]:1002リクエスト、ドメインあたり6リクエストでテスト* 167ドメイン(127.0.0。*)
  • [^ note3]:非同期コンテキストで呼び出された場合(例:setTimeout、+ requestAnimationFramethen...
  • [^ note4]:最後の6つはフォローアップです(2、4、6はそれぞれ0.5秒、1秒、1.5秒で利用可能)

11
バージョン50以降、Chromeは最大17の最大接続数をサポートするようになり、FirefoxやSafariと同等の性能を発揮します。
Zhaph-Ben Duguid 2017年

この答えは少し誤解を招くと思います。ホストとドメインは完全に異なります。ConnectionsPerHostnameはサブドメインごとを意味します。したがって、2つのサブドメインがある場合は追加の接続を使用します。サブドメインがない場合は、ドメインごとを意味します。
ドンディランガ、2017年

14
この制限はChromeタブごとですか?または、Chromeの単一インスタンスのすべてのタブ?または、Chromeのすべてのインスタンスのすべてのタブ?
AshD、


14

Firefoxはその数をこの設定に保存します(で見つけますabout:config):network.http.max-connections-per-server

最大接続の場合、Firefoxはそれをこの設定に保存します。 network.http.max-connections


network.http.max-connectionsバージョン52の試験を介して依然として17で並列接続の最大数に関係しない、デフォルトでは900である
user2867288

3
それはnetwork.http.max-persistent-connections-per-server実際です
レッヒ・オシスキ

9

ページでテストを行うと、この動作が見られました。

Safari 4: 6  
Chrome 6: 7  
FF 4: 6

編集:Firefox 4は15の接続を実行できるはずですが、それは私が観察した動作ではありません。


Chromeのどのバージョンですか?6か5?
ハスキー

私はそれが6だったと思いますが、私は開発チャンネルにいて、少し前のことでした。サイレントアップデートは、常に確認する必要があることを意味します。
Jethro Larson、

5

2つの同時要求は、多くのブラウザーの設計の意図的な部分です。「良いhttpクライアント」が故意に固守する標準があります。このRFCをチェックして理由を確認してください。


私は同意します、おそらく標準に従うのが最善でしょう。
palswim 2010

13
以下の規格は良いですが、そう常識を適用し、に参加している見直したもの:参照trac.tools.ietf.org/wg/httpbis/trac/ticket/131
ジュリアンReschke

1
良い点@JulianReschkeですが、HTTP / 2では、ホストあたりの接続数を増やす必要はありません。参照:http2.github.io/faq/#why-just-one-tcp-connection
David

5

見てみるとabout:configGNU / Linux上のFirefox 33(Ubuntuの)上、および検索connections私が見つかりました:

network.http.max-connections:256

すべてのドメインにわたって、ブラウザごとのアクティブな接続の数に制限がある場合、それは部分に答える可能性があります

network.http.max-persistent-connections-per-proxy:32

network.http.max-persistent-connections-per-server:6

2つのプロパティをスキップしました...

network.websocket.max-connections:200

(興味深い、サーバーごとに制限されていないようですが、デフォルト値がグローバルhttp接続よりも低いようです)


2

サーバーごとのブラウザーの最大接続数を過度に増やすと(一部のサイトが示唆するように)、サーバー上の同時接続の総数を制限するホスティングプランを使用している他のユーザーを小さなサイトからロックできることに注意してください。


2

私の理解では、接続制限はクライアント側では変更できません。影響を与えるには、サーバーで接続制限を変更する必要があります。デフォルトでは、多くのサーバーは一意のクライアントごとに2つの接続のみを許可します。

クライアントはブラウザではなく、TCP / IP要求を発行するクライアントマシンです。

効果をはっきりと確認するには、JMeterのようなものを使用して、サーバーホストへの一連のWebサービス呼び出しを開始します。最初の2つは受け入れられ、2つのうちの1つが完了するまで別の呼び出しを受け入れません。これについて驚くべきことは、SOAショップにとって、これは非常に重要ですが、誰もそれを実際に認識していることはほとんどないということです。


1

各ブラウザには独自の構成があり、この構成は変更される可能性があるため、これに対する明確な答えはありません。インターネットで検索する場合、この制限を変更する方法を見つけることができます(通常、これらは「パフォーマンス強化方法」としてブランド化されています)。Webサイトで必要な場合は、ユーザーに変更するようにアドバイスすることをお勧めします。


繰り返しますが、これはブラウザで設定できません-または設定できるかもしれませんが、効果はありません。クライアントまたはクライアント上のブラウザではなく、クライアントごとに2つの接続を強制するのはサーバーです。ブラウザーの接続を増やすと、より多くの異なるサーバーへの2つの接続が可能になります(つまり、一度に複数のサーバーからダウンロードできますが、問題はありません)。ただし、単一のサーバーから同時に3つ以上のファイルをダウンロードすることはできません。これを行うには、サーバーを変更する必要があります。
Rodney P. Barbati

2
この回答は古くなっていますが、書かれた時点では正確です。まず、サーバーがIPごとの接続を大幅に制限することはめったにないので、私はあなたが間違っていると思います。第2に、2009年、IE 7はまだ存在しており、ホスト名ごとに最大2つの接続がありました。これは、システムレジストリを介して構成可能でした。現在でも、ブラウザには制限があり、多くの場合設定可能ですが、それらの制限は当時よりもはるかに高くなっています。とにかく、SPDY / HTTP2の登場により、サーバーとブラウザーが新しいプロトコルを実装するため、これは非常に小さな問題になっています。
Blixt 2015年

1
  1. はい、ワイルドカードドメインが機能します。
  2. 接続の制限を認識していません。ブラウザー固有の制限があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.