Максимальне паралельне з'єднання http у браузері?


465

Я створюю кілька призупинених підключень до HTTP-сервера (комета, зворотний аякс тощо). Це працює нормально, але я бачу, що браузер дозволяє лише два призупинених підключення до даного домену одночасно. Отже, якщо користувач переглядає мій веб-сайт у 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
Джефф Пукетт

Тут слід вирішити лише одне призупинене підключення для всіх оновлень вкладки. Коли вкладка відкрита, на сервер надсилається запит на оновлення для цієї вкладки, і вона прослуховує на головному призупиненому з'єднанні будь-які оновлення, і вибирає лише ті, що цікавлять. Я знаю, що це не те, що ти прошу, але думав, що комусь це може бути корисно. :-)
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 на сервері?
Адріан Маккарті

53
Так. Останні веб-переглядачі більше не відповідають.
Альссенде

38
Цитування для цих меж?
AJ.

19
Чи існують обмеження на з'єднання WebSockets за походженням?
Мітар

13
Ліміт 2 підключення на один сервер було знято з HTTP 1.1 RFC: evertpot.com/http-11-update
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)

Аналогічну таблицю можна знайти на веб-сайті 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 це вже не так, оскільки мультиплексування набирає однакову швидкість за один TCP з'єднання?
Стефан

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...
  • [^ примітка4]: з яких останні 6 - це подальші спостереження (2,4,6 доступні за 0,5s, 1s, 1,5s відповідно)

11
Станом на версію 50+ Chrome зараз підтримує максимум 17 максимальних з'єднань, що відповідає рівним можливостям Firefox та Safari.
Джаф - Бен Дюгід

Я думаю, що ця відповідь трохи вводить в оману. Хост і домен абсолютно різні. ПідключенняPerHostname означає на субдомен. Отже, якщо є 2 піддомені, він використовує додаткові зв'язки. Якщо немає піддомену, то це означає на домен.
Дон Діланга

14
Це обмеження на хромовану вкладку? Або Усі вкладки в одному екземплярі Chrome? Або всі вкладки для всіх примірників Chrome?
AshD

45

Різні веб-переглядачі мають різні обмеження на максимальне з'єднання на ім’я хоста; Ви можете знайти точні цифри на веб- сайті http://www.browserscope.org/?category=network, і ось цікава стаття про обмеження підключення від експерта з веб-продуктивності Стіва Суудера http://www.stevesouders.com/blog/2008/ 03/20 / з'єднання паралельних з'єднань /


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насправді
Лех Осінський

9

Виконуючи тестування на сторінці, я побачив таку поведінку:

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

Редагувати: Здається, що Firefox 4 має змогу зробити 15 з'єднань, але це не та поведінка, яку я спостерігав.


Яка версія Chrome? 6 чи 5?
Хаскі

Я думаю, це було 6, але я перебуваю на телеканалі dev, і це було небагато часу тому. Мовчазні оновлення означають, що я повинен постійно перевіряти.
Jethro Larson

5

Два паралельних запити - це навмисна частина дизайну багатьох браузерів. Існує стандарт, якого "хороші клієнти http" спеціально дотримуються. Перевірте цей RFC, щоб дізнатися, чому.


Я згоден, було б, мабуть, найкраще слідувати стандарту.
palswim

13
Дотримуватися стандартів добре, але так само застосовувати здоровий глузд і брати участь у перегляді цих: див. Trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian

1
Хороша справа @JulianReschke, але для HTTP / 2 більше не потрібно мати велику кількість з'єднань на хості. Дивіться: http2.github.io/faq/#why-just-one-tcp-connection
Девід

5

Подивившись about:configна Firefox 33 в GNU / Linux (Ubuntu), і connectionsзнайшов:

network.http.max-з'єднання: 256

Можливо, це відповість на частину, чи існує обмеження кількості активних підключень на браузер у всьому домені

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

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

пропустив дві властивості ...

network.websocket.max-з'єднання: 200

(цікаво, здається, вони не обмежені на одному сервері, але мають значення за замовчуванням, ніж глобальні http-з'єднання)


2

Зауважте, що збільшення максимальної кількості підключень браузера на сервері до надмірної кількості (як це пропонують деякі сайти) може і блокує інших користувачів із невеликих сайтів із планами хостингу, які обмежують загальне одночасне з'єднання на сервері.


2

Я розумію, що межа клієнта не може змінюватися на стороні клієнта. Ліміт з'єднання повинен бути змінений на сервері, щоб мати будь-який ефект. За замовчуванням багато серверів дозволять використовувати лише 2 з'єднання на кожного унікального клієнта.

Клієнт - це не браузер, це машина клієнта, що видає запити TCP / IP.

Щоб побачити ефект дуже чітко, використовуйте щось на зразок JMeter, щоб звільнити купу викликів веб-служб на хост вашого сервера - він прийме перші два, а інший не прийме, поки одне з двох не буде завершено. Дивовижна річ у цьому, що для магазину SOA це дуже важливо, але навряд чи хтось насправді знає про це.


1

На це немає остаточної відповіді, оскільки кожен браузер має власну конфігурацію для цього, і ця конфігурація може бути змінена. Якщо ви шукаєте в Інтернеті, ви можете знайти способи змінити цей ліміт (зазвичай його називають "методами підвищення продуктивності".) Можливо, варто порадити вашим користувачам робити це, якщо цього вимагає ваш веб-сайт.


Повторюю, це неможливо налаштувати на веб-переглядачі - а може бути, але все одно не матиме жодного ефекту. Саме сервер здійснює 2 підключення на кожного клієнта, а не клієнт і не браузер клієнта. Збільшення з'єднань у браузері дозволить вам мати 2 підключення до більш чітких серверів (тобто ви можете завантажувати з декількох серверів одночасно, без проблем). Однак ви не можете завантажувати більше ніж 2 файли з будь-якого одного сервера одночасно. Для цього потрібно змінити сервер.
Родні П. Барбаті

2
Зазначена відповідь застаріла, але точна на час написання. По-перше, сервери рідко суттєво обмежують з'єднання на IP, тому я думаю, що ви там помиляєтеся. По-друге, у 2009 році IE 7 все ще існував і мав максимум два з'єднання на ім’я хоста. Це можна було налаштувати через системний реєстр. Навіть сьогодні браузери мають обмеження, і вони часто налаштовуються, але ці межі набагато вищі, ніж тоді. Так чи інакше, з появою SPDY / HTTP2 це стало значно меншою проблемою, оскільки сервери та браузери реалізують новий протокол.
Blixt

1
  1. Так, домен wildcard буде працювати для вас.
  2. Не знає жодних обмежень на з'єднання. Обмеження, якщо такі будуть, залежать від браузера.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.