브라우저에서 최대 병렬 http 연결?


465

HTTP 서버 (comet, reverse ajax 등)에 대한 일시 중단 된 연결을 만들고 있습니다. 정상적으로 작동하지만 브라우저가 주어진 도메인에 대한 일시 중단 된 연결을 두 번만 허용한다는 것을 알았습니다. 따라서 사용자가 브라우저의 Tab1에서 내 웹 사이트를보고있는 경우 Tab2에서도 웹 사이트를로드하려고 시도하면 내 사이트에 대해 허용 된 두 연결을 모두 사용했습니다.

내 와일드 카드 도메인 작업을 수행 할 수 있다고 생각합니다. 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

여기서 해결 방법은 모든 탭 업데이트에 대해 하나의 연결이 일시 중단 된 것입니다. 탭을 열면 해당 탭에 대한 업데이트 요청이 서버로 전송되고 탭은 기본 일시 중단 된 연결에서 모든 업데이트에 대해 수신 대기하고 관심있는 업데이트 만 선택합니다. 묻고 있지만 누군가에게 유용 할 것이라고 생각했습니다. :-)
Craigo 2019

답변:


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로 제한하지 않습니까?
Adrian McCarthy

53
그렇습니다. 최근 브라우저는 더 이상 호환되지 않습니다.
Alsciende

38
이 한계에 대한 인용?
AJ.

19
오리진 당 WebSocket 연결에 제한이 있습니까?
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

따라서 웹 브라우저가 HTTP 1.1을 사용하여 다른 리소스를 더 빨리로드하기 위해 호스트 당 여러 개의 TCP (~ 6 병렬) 연결을 여는 것이 일반적이므로 멀티플렉싱이 하나의 TCP에서 동일한 속도를 얻으므로 HTTP / 2의 경우는 더 이상 그렇지 않습니다 연결?
Stefan

117
 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 이고 두 번째 값은 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, + requestAnimationFrame, then...의 콜백에서 )
  • [^ note4] : 마지막 6 개는 후속 조치입니다 (2,4,6은 각각 0.5, 1, 1.5 초에 사용 가능)

11
버전 50+부터 Chrome은 이제 최대 17 개의 최대 연결을 지원하여 Firefox 및 Safari와 동등한 수준으로 제공합니다.
Zhaph-벤 Duguid

나는이 대답이 약간 오도라고 생각합니다. 호스트와 도메인은 완전히 다릅니다. ConnectionsPerHostname은 하위 도메인 당을 의미합니다. 따라서 2 개의 하위 도메인이있는 경우 추가 연결을 사용합니다. 하위 도메인이없는 경우 도메인 당을 의미합니다.
Don Dilanga

14
크롬 탭당 한도입니까? 아니면 단일 Chrome 인스턴스의 모든 탭? 아니면 모든 Chrome 인스턴스의 모든 탭?
AshD


14

Firefox는이 설정에 해당 번호를 저장합니다 (에서 찾을 수 있음 about:config).network.http.max-connections-per-server

최대 연결의 경우 Firefox는이 설정에 다음을 저장합니다. network.http.max-connections


network.http.max-connections는 기본적으로 900이며, 버전 52의 테스트를 통해 여전히 17 인 최대 병렬 연결 수와 관련이 없습니다.
user2867288

3
그것은 network.http.max-persistent-connections-per-server실제로
레흐 Osiński

9

페이지에서 테스트를 하면서이 동작을 보았습니다.

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

편집 : 파이어 폭스 4는 15 개의 연결을 수행 할 수 있어야하지만 그것은 내가 본 행동이 아닙니다.


어떤 버전의 Chrome? 6 또는 5?
Husky

나는 그것이 6이라고 생각하지만 나는 dev 채널에 있고 조금 전에 있었다. 자동 업데이트는 항상 확인해야 함을 의미합니다.
Jethro Larson

5

2 개의 동시 요청은 많은 브라우저 디자인의 의도적 인 부분입니다. "좋은 http 클라이언트"가 의도적으로 준수한다는 표준이 있습니다. 이 RFC 를 확인하여 이유를 확인하십시오.


나는 아마도 표준을 따르는 것이 최선일 것이라고 동의한다.
palswim

13
표준을 따르는 것이 좋지만 상식을 적용하고 수정 하는 데 참여하고 있습니다. trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke

1
@JulianReschke가 좋은 점이지만 HTTP / 2에서는 더 이상 호스트 당 많은 수의 연결이 필요하지 않습니다. 참조 : http2.github.io/faq/#why-just-one-tcp-connection
David

5

about:configGNU / Linux (Ubuntu)의 Firefox 33을 보고 검색 한 connections결과 :

network.http.max-connections : 256

모든 도메인에서 브라우저 당 활성 연결 수에 제한이 있는 부분에 대한 답이 될 수 있습니다.

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

서버 당 네트워크 : http.max-persistent-connections : 6

두 속성을 건너 뛰었습니다 ...

network.websocket.max- 연결 수 : 200

(흥미로운 것은 서버 당 제한되지 않지만 전역 http 연결보다 기본값이 낮은 것 같습니다)


2

서버 당 브라우저의 최대 연결을 과도한 수로 늘리면 (일부 사이트에서 제안한 바와 같이) 서버에서 총 동시 연결을 제한하는 호스팅 계획으로 다른 사이트의 다른 사용자를 잠글 수 있습니다.


2

클라이언트 측에서는 연결 제한을 변경할 수 없다는 것을 이해합니다. 서버에서 연결 제한을 변경해야 효과가 있습니다. 기본적으로 많은 서버는 고유 한 클라이언트 당 2 개의 연결 만 허용합니다.

클라이언트는 브라우저가 아니며 TCP / IP 요청을 발행하는 클라이언트 시스템입니다.

이 효과를 매우 명확하게 보려면 JMeter와 같은 것을 사용하여 서버 호스트에 많은 웹 서비스 호출을 시작하십시오. 처음 두 개를 수락하고 두 개 중 하나가 완료 될 때까지 다른 웹 서비스 호출을 수락하지 않습니다. 이것에 대한 놀라운 점은 SOA 상점의 경우 매우 중요하지만 실제로는 거의 아무도 알지 못한다는 것입니다.


1

각 브라우저마다 고유 한 구성이 있으며이 구성이 변경 될 수 있으므로 이에 대한 명확한 대답은 없습니다. 인터넷에서 검색하면이 제한을 변경할 수있는 방법을 찾을 수 있습니다 (보통 "성능 향상 방법"이라는 브랜드로 표시되어 있음). 웹 사이트에 필요한 경우 사용자에게 조언하는 것이 좋습니다.


반복합니다. 브라우저에서 구성 할 수 없습니다. 그렇지 않을 수도 있지만 여전히 아무런 영향을 미치지 않습니다. 클라이언트 또는 클라이언트의 브라우저가 아닌 클라이언트 당 2 개의 연결을 적용하는 서버입니다. 브라우저에서 연결을 늘리면보다 고유 한 서버에 2 개의 연결을 가질 수 있습니다 (예 : 한 번에 여러 서버에서 다운로드 할 수 있음). 그러나 단일 서버에서 동시에 두 개 이상의 파일을 다운로드 할 수는 없습니다. 그렇게하려면 서버를 수정해야합니다.
Rodney P. Barbati

2
이 답변은 구식이지만, 작성된 시점의 정확한 답변입니다. 첫째, 서버가 IP 당 연결을 크게 제한하는 경우는 거의 없으므로 잘못 생각합니다. 둘째, 2009 년 IE 7은 여전히 ​​사용 중이며 호스트 이름 당 최대 2 개의 연결이있었습니다. 이것은 시스템 레지스트리를 통해 구성 할 수 있습니다. 오늘날에도 브라우저에는 한계가 있으며, 종종 구성 할 수 있지만 그 한계는 이전보다 훨씬 높습니다. 어쨌든 SPDY / HTTP2의 등장으로 서버와 브라우저가 새로운 프로토콜을 구현함에 따라 이는 훨씬 작은 문제가되었습니다.
Blixt

1
  1. 예, 와일드 카드 도메인이 적합합니다.
  2. 연결 제한이 없습니다. 브라우저에 따라 다를 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.