브라우저에서 최대 병렬 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.