การเชื่อมต่อ http ขนานสูงสุดในเบราว์เซอร์?


465

ฉันกำลังสร้างการเชื่อมต่อที่ถูกระงับไปยังเซิร์ฟเวอร์ HTTP (ดาวหาง, ย้อนกลับ 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
ใช่เรียกว่าsharding โดเมนซึ่งเป็นกลยุทธ์ที่ล้าสมัยในยุคของ HTTP / 2
Jeff Puckett

วิธีแก้ไขที่นี่คือมีการเชื่อมต่อที่ถูกระงับเพียงครั้งเดียวสำหรับการปรับปรุงแท็บทั้งหมดของคุณ เมื่อเปิดแท็บคำขอสำหรับการอัปเดตสำหรับแท็บนั้นจะถูกส่งไปยังเซิร์ฟเวอร์และแท็บจะฟังการเชื่อมต่อหลักที่ถูกระงับสำหรับการอัปเดตใด ๆ และรับเฉพาะสิ่งที่สนใจเท่านั้นฉันรู้ว่านี่ไม่ใช่สิ่งที่คุณ ขอให้ แต่คิดว่าอาจเป็นประโยชน์สำหรับใครบางคน :-)
Craigo

คำตอบ:


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

ขีด จำกัด คือต่อเซิร์ฟเวอร์ / พร็อกซีดังนั้นรูปแบบไวด์การ์ดของคุณจะใช้งานได้

FYI: สิ่งนี้เกี่ยวข้องกับ HTTP 1.1 โดยเฉพาะ โปรโตคอลอื่น ๆ มีข้อกังวลและข้อ จำกัด แยกต่างหาก (เช่น SPDY, TLS, HTTP 2)


41
ฉันประหลาดใจ. HTTP 1.1 RFC ไม่ได้บอกว่าจะ จำกัด การเชื่อมต่อแบบคงที่ถึง 2 ต่อเซิร์ฟเวอร์หรือไม่?
Adrian McCarthy

53
ใช่. เบราว์เซอร์ล่าสุดไม่สอดคล้องอีกต่อไป
Alsciende

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-70-/

HTTP / 2 (SPDY)

Multiplexed support(one single TCP connection for all requests)

ตารางที่คล้ายกันสามารถพบได้ที่http://sgdev-blog.blogspot.com/2014/01/maximum-concurrent-connection-to-same.html
Jo

1
เบราว์เซอร์สามารถใช้ค่าที่สูงเหล่านี้ได้จริงหรือไม่ถ้ามันถูก จำกัด ให้มีค่าต่ำกว่าในระดับระบบปฏิบัติการ? เบราว์เซอร์สามารถแทนที่การตั้งค่าระบบปฏิบัติการได้หรือไม่ เช่นเดียวกับใน Windows คุณมีการตั้งค่ารีจิสทรีน้อย (MaxConnectionsPerServer และ MaxConnectionsPer1_0Server) ซึ่งควบคุมการเชื่อมต่อสูงสุดต่อเซิร์ฟเวอร์ดังที่กล่าวไว้ในโพสต์นี้: stackoverflow.com/questions/2960056/…
RBT

ที่กลายเป็น. NET ปัญหาเฉพาะการเขียนโปรแกรม เบราว์เซอร์ของบุคคลที่สามจะใช้การสนับสนุน HTTP ของตนเองดังนั้นจะไม่ได้รับผลกระทบจากขีด จำกัด ของ Windows
thomasrutter

ดังนั้นจึงเป็นเรื่องปกติสำหรับเว็บเบราว์เซอร์ที่จะเปิดการเชื่อมต่อ TCP (~ 6 ขนาน) หลายรายการต่อโฮสต์เพื่อโหลดทรัพยากรที่แตกต่างกันได้เร็วขึ้นด้วย HTTP 1.1 นี่ไม่ใช่กรณีสำหรับ 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 MaxConnections

ที่มา: http://www.browserscope.org/?category=network&v=top

หมายเหตุ: ConnectionsPerHostnameเป็นจำนวนสูงสุดของคำร้องขอ http ที่เกิดขึ้นพร้อมกันที่เบราว์เซอร์จะสร้างในโดเมนเดียวกัน เพื่อเพิ่มจำนวนการเชื่อมต่อพร้อมกันหนึ่งสามารถโฮสต์ทรัพยากร (เช่นภาพ) ในโดเมนที่แตกต่างกัน อย่างไรก็ตามคุณจะต้องไม่เกิน MaxConnectionsจำนวนการเชื่อมต่อสูงสุดที่เบราว์เซอร์จะเปิดทั้งหมด - ในทุกโดเมน

2563 ปรับปรุง

จำนวนการเชื่อมต่อแบบขนานต่อเบราว์เซอร์

| 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]: เมื่อถูกเรียกในบริบทของ async เช่นในการติดต่อกลับsetTimeout, + requestAnimationFrame,then ...
  • [^ note4]: รายการสุดท้าย 6 รายการ (2,4,6 รายการที่ 0.5 วินาที, 1 วินาที, 1.5 วินาทีตามลำดับ)

11
ตั้งแต่เวอร์ชัน 50+ Chrome ตอนนี้รองรับการเชื่อมต่อสูงสุด 17 การเชื่อมต่อสูงสุดทำให้ Firefox และ Safari ใกล้เคียงกัน
Zhaph - Ben Duguid

ฉันคิดว่าคำตอบนี้ทำให้เข้าใจผิดเล็กน้อย โฮสต์และโดเมนนั้นแตกต่างกันโดยสิ้นเชิง ConnectionsPerHostname หมายถึงต่อโดเมนย่อย ดังนั้นหากมี 2 โดเมนย่อยก็จะใช้การเชื่อมต่อเพิ่มเติมหากไม่มีโดเมนย่อยก็หมายความว่าต่อโดเมน
Don Dilanga

14
ขีด จำกัด นี้มีต่อแท็บ Chrome หรือไม่ หรือแท็บทั้งหมดใน Chrome เดียวหรือไม่ หรือแท็บทั้งหมดในทุกกรณีของ Chrome?
AshD

45

เบราว์เซอร์ต่าง ๆ มีข้อ จำกัด ต่าง ๆ สำหรับการเชื่อมต่อสูงสุดต่อชื่อโฮสต์ คุณสามารถค้นหาหมายเลขที่แน่นอนได้ที่http://www.browserscope.org/?category=network และนี่เป็นบทความที่น่าสนใจเกี่ยวกับข้อ จำกัด การเชื่อมต่อจากผู้เชี่ยวชาญด้านประสิทธิภาพเว็บสตีฟ Souders http://www.stevesouders.com/blog/2008/ 20/3 / บทสรุป-on-ขนานเชื่อมต่อ /


14

Firefox เก็บหมายเลขนั้นไว้ในการตั้งค่านี้ (คุณพบในabout:config):network.http.max-connections-per-server

สำหรับการเชื่อมต่อสูงสุด Firefox จัดเก็บไว้ในการตั้งค่านี้: network.http.max-connections


network.http.max-connectionsคือ 900 โดยค่าเริ่มต้นซึ่งไม่เกี่ยวข้องกับจำนวนสูงสุดของการเชื่อมต่อแบบขนานซึ่งผ่านการทดสอบเวอร์ชัน 52 ยังคงเป็น 17
2867288

3
เป็นnetwork.http.max-persistent-connections-per-serverจริง
Lech Osiński

9

ทำการทดสอบบนหน้าเว็บฉันเห็นพฤติกรรมนี้:

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

แก้ไข: ดูเหมือนว่า firefox 4 น่าจะสามารถเชื่อมต่อได้ 15 จุด แต่นั่นไม่ใช่พฤติกรรมที่ฉันสังเกตเห็น


Chrome รุ่นใด 6 หรือ 5
ฮัสกี้

ฉันคิดว่ามันคือ 6 แต่ฉันอยู่ในช่อง dev และมันเป็นเพียงเล็กน้อยเมื่อเร็ว ๆ นี้ การอัพเดทเงียบหมายถึงฉันต้องตรวจสอบตลอดเวลา
Jethro Larson

5

คำขอที่เกิดขึ้นพร้อมกัน 2 คำขอเป็นส่วนหนึ่งในการออกแบบเบราว์เซอร์จำนวนมาก มีมาตรฐานออกมาว่า "ลูกค้า HTTP ที่ดี" เป็นไปตามวัตถุประสงค์ ตรวจสอบRFC นี้เพื่อดูว่าทำไม


ฉันเห็นด้วยมันคงเป็นการดีที่สุดที่จะปฏิบัติตามมาตรฐาน
palswim

13
มาตรฐานต่อไปนี้ดี แต่ใช้สามัญสำนึกและการมีส่วนร่วมในการแก้ไข : ดูtrac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke

1
Good point @JulianReschke แต่ด้วย HTTP / 2 ไม่จำเป็นต้องมีการเชื่อมต่อจำนวนมากต่อโฮสต์อีกต่อไป ดู: http2.github.io/faq/#why-just-one-tcp-connection
David

5

มองไปที่about:configFirefox 33 บน GNU / Linux (Ubuntu) และค้นหาconnectionsฉันพบ:

network.http.max-connections: 256

ที่น่าจะเป็นคำตอบส่วนหนึ่งมีการ จำกัด จำนวนการเชื่อมต่อที่ใช้งานอยู่ต่อเบราว์เซอร์ในทุกโดเมน

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

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

ข้ามคุณสมบัติสองอย่าง ...

network.websocket.max-connections: 200

(น่าสนใจดูเหมือนว่าไม่ จำกัด ต่อเซิร์ฟเวอร์ แต่มีค่าเริ่มต้นต่ำกว่าการเชื่อมต่อ http ทั่วโลก)


2

โปรดทราบว่าการเพิ่มการเชื่อมต่อสูงสุดของเบราว์เซอร์ต่อเซิร์ฟเวอร์เป็นจำนวนมากเกินไป (ตามที่บางไซต์แนะนำ) สามารถและล็อคผู้ใช้รายอื่นจากไซต์ขนาดเล็กด้วยแผนการโฮสต์ที่ จำกัด การเชื่อมต่อพร้อมกันทั้งหมดบนเซิร์ฟเวอร์


2

ฉันเข้าใจว่าขีด จำกัด การเชื่อมต่อไม่สามารถเปลี่ยนแปลงได้ในฝั่งไคลเอ็นต์ ขีด จำกัด การเชื่อมต่อต้องเปลี่ยนบนเซิร์ฟเวอร์เพื่อให้มีผลกระทบใด ๆ โดยค่าเริ่มต้นเซิร์ฟเวอร์จำนวนมากจะอนุญาตให้มีการเชื่อมต่อ 2 ต่อลูกค้าที่ไม่ซ้ำกัน

ไคลเอ็นต์ไม่ใช่เบราว์เซอร์เป็นเครื่องไคลเอ็นต์ที่ออกคำขอ TCP / IP

หากต้องการเห็นผลอย่างชัดเจนให้ใช้บางอย่างเช่น JMeter เพื่อตัดการเรียกใช้บริการเว็บจำนวนมากไปยังโฮสต์เซิร์ฟเวอร์ของคุณซึ่งจะยอมรับสองข้อแรกและจะไม่ยอมรับอีกจนกว่าจะเสร็จสิ้น สิ่งที่น่าอัศจรรย์เกี่ยวกับเรื่องนี้คือสำหรับร้านค้า SOA สิ่งนี้มีความสำคัญ แต่แทบจะไม่มีใครตระหนักถึงมัน


1

ไม่มีคำตอบที่ชัดเจนสำหรับเรื่องนี้เนื่องจากแต่ละเบราว์เซอร์มีการกำหนดค่าของตัวเองสำหรับเรื่องนี้และการกำหนดค่านี้อาจมีการเปลี่ยนแปลง หากคุณค้นหาบนอินเทอร์เน็ตคุณสามารถค้นหาวิธีในการเปลี่ยนขีด จำกัด นี้ (โดยปกติแล้วพวกเขาจะมีแบรนด์เป็น "วิธีการปรับปรุงประสิทธิภาพ") มันอาจคุ้มค่าที่จะแนะนำให้ผู้ใช้ของคุณทำเช่นนั้นหากเว็บไซต์ของคุณต้องการ


ฉันทำซ้ำสิ่งนี้ไม่สามารถกำหนดค่าได้บนเบราว์เซอร์ - หรืออาจเป็นไปได้ แต่ก็ยังไม่มีผลใด ๆ เป็นเซิร์ฟเวอร์ที่บังคับใช้การเชื่อมต่อ 2 รายการต่อไคลเอนต์ไม่ใช่ไคลเอ็นต์หรือเบราว์เซอร์บนไคลเอ็นต์ การเพิ่มการเชื่อมต่อบนเบราว์เซอร์จะช่วยให้คุณมี 2 การเชื่อมต่อไปยังเซิร์ฟเวอร์ที่แตกต่างกันมากขึ้น (เช่นคุณสามารถดาวน์โหลดได้จากเซิร์ฟเวอร์หลายเครื่องในเวลาเดียวกันโดยไม่มีปัญหา) อย่างไรก็ตามคุณไม่สามารถดาวน์โหลดไฟล์ได้มากกว่า 2 ไฟล์จากเซิร์ฟเวอร์เดียวในเวลาเดียวกัน เพื่อที่จะทำเช่นนั้นเซิร์ฟเวอร์จะต้องแก้ไข
Rodney P. Barbati

2
ที่ได้รับคำตอบนี้ล้าสมัย แต่มันถูกต้องตามเวลาที่เขียน อันดับแรกเซิร์ฟเวอร์ไม่ค่อย จำกัด การเชื่อมต่อต่อ IP อย่างมากดังนั้นฉันคิดว่าคุณผิดที่นั่น ประการที่สองในปี 2009 IE 7 ยังคงอยู่และมีการเชื่อมต่อสูงสุดสองรายการต่อชื่อโฮสต์ สิ่งนี้สามารถกำหนดค่าผ่านรีจิสตรีของระบบ แม้กระทั่งทุกวันนี้เบราว์เซอร์มีขีด จำกัด และมักจะสามารถกำหนดค่าได้ แต่ข้อ จำกัด เหล่านั้นสูงกว่าเมื่อก่อนมาก อย่างไรก็ตามด้วยการกำเนิดของ SPDY / HTTP2 นี้ได้กลายเป็นปัญหาที่มีขนาดเล็กลงอย่างมีนัยสำคัญเป็นเซิร์ฟเวอร์และเบราว์เซอร์ใช้โปรโตคอลใหม่
Blixt

1
  1. ใช่โดเมนไวด์การ์ดจะทำงานให้คุณ
  2. ไม่ทราบข้อ จำกัด ในการเชื่อมต่อ จำกัด หากมีจะเฉพาะเบราว์เซอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.