development

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

big-blog 2020. 2. 18. 22:51
반응형

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


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를 선택했습니다.


최대 서버 / 프록시 당 기본 동시 영구 연결 수 :

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).


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)

 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를 초과 할 수는 없습니다 . 즉, 모든 도메인에서 브라우저가 전체적으로 열리는 최대 연결 수입니다.


다양한 브라우저에는 호스트 이름 당 최대 연결 수에 대한 다양한 제한이 있습니다. http://www.browserscope.org/?category=network 에서 정확한 숫자를 찾을 수 있으며 여기에는 웹 성능 전문가 Steve Souders의 연결 제한에 대한 흥미로운 기사가 ​​있습니다. http://www.stevesouders.com/blog/2008/ 03 / 20 / 라운드 업-병렬 연결 /


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

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


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

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

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


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


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 연결보다 기본값이 낮은 것 같습니다)


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


  1. 예, 와일드 카드 도메인이 적합합니다.
  2. 연결 제한이 없습니다. 브라우저에 따라 다를 수 있습니다.

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


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

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

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

참고 URL : https://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a-browser



도와주세요.
반응형