Максимальное количество параллельных 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
да, это называется разбиением домена, что является устаревшей стратегией в эпоху HTTP / 2
Джефф
Решение здесь состоит в том, чтобы иметь только одно приостановленное соединение для всех обновлений ваших вкладок. Когда вкладка открыта, на сервер отправляется запрос обновлений для этой вкладки, и вкладка прослушивает основное приостановленное соединение на наличие обновлений и выбирает только те, которые ей интересны. Я знаю, что это не то, что вы Вы спрашиваете, но подумал, что это может быть полезно для кого-то. :-)
Крейго

Ответы:

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

Alsciende
источник
41
Я удивлен. Разве HTTP 1.1 RFC не говорит об ограничении постоянных соединений до 2 на сервер?
Адриан Маккарти
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-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
Джо.
1
Может ли браузер действительно использовать эти высокие значения, если он ограничен более низким значением на уровне операционной системы? Может ли браузер переопределить настройки ОС? Как и в Windows, у вас есть несколько параметров реестра (MaxConnectionsPerServer и MaxConnectionsPer1_0Server), которые контролируют максимальное количество подключений на сервер, как упомянуто в этом посте: stackoverflow.com/questions/2960056/…
RBT
Это оказалось специфической проблемой программирования .NET. В любом случае сторонние браузеры реализуют свою собственную поддержку HTTP, поэтому ограничения Windows не будут затронуты.
Томасруттер
Так как веб-браузер обычно открывает несколько соединений TCP (~ 6 параллельных) для каждого хоста, чтобы быстрее загружать различные ресурсы с помощью HTTP 1.1, это больше не относится к HTTP / 2, поскольку мультиплексирование получает одинаковую скорость по одному TCP связь?
Стефан
118
 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.
Жаф - Бен Дугуид
Я думаю, что этот ответ немного вводит в заблуждение. Хост и домен совершенно разные. ConnectionsPerHostname означает для каждого субдомена. Таким образом, если есть 2 субдомена, он использует дополнительные соединения. Если нет субдомена, то это означает для каждого домена.
Дон Диланга
14
Это ограничение на вкладку Chrome? Или все вкладки в одном экземпляре Chrome? Или все вкладки во всех экземплярах Chrome?
AshD
45

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

Soroush
источник
14

Firefox сохраняет этот номер в этой настройке (вы найдете его в about:config):network.http.max-connections-per-server

Для максимальных соединений Firefox сохраняет это в этом параметре: network.http.max-connections

palswim
источник
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

Изменить: Кажется, что Firefox 4 должен быть в состоянии сделать 15 подключений, но это не то поведение, которое я наблюдал.

Джетро Ларсон
источник
Какая версия Chrome? 6 или 5?
Хаски
Я думаю, что это было 6, но я на канале разработчика, и это было некоторое время назад. Бесшумные обновления означают, что я должен все время проверять.
Джетро Ларсон
5

2 одновременных запроса являются намеренной частью дизайна многих браузеров. Существует стандарт, которого "хорошие http-клиенты" придерживаются специально. Проверьте этот RFC, чтобы увидеть почему.

мистифицировать
источник
Я согласен, вероятно, было бы лучше следовать стандарту.
Palswim
13
Следовать стандартам - это хорошо, но также применять здравый смысл и участвовать в их пересмотре : см. Trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Джулиан Решке,
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-connections-per-proxy: 32

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

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

network.websocket.max-подключений: 200

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

orique
источник
2

Обратите внимание, что увеличение максимального количества подключений браузера к серверу до чрезмерного количества (как предлагают некоторые сайты) может блокировать других пользователей на небольших сайтах с планами хостинга, которые ограничивают общее количество одновременных подключений к серверу.

Джон А.
источник
2

Насколько я понимаю, предел подключения не может быть изменен на стороне клиента. Предел соединения должен быть изменен на сервере, чтобы иметь какой-либо эффект. По умолчанию на многих серверах разрешено только 2 подключения для каждого уникального клиента.

Клиент - это не браузер, а клиентский компьютер, выдающий запросы TCP / IP.

Чтобы увидеть эффект очень четко, используйте что-то вроде JMeter для запуска нескольких вызовов веб-сервисов на хосте вашего сервера - он примет первые два и не примет другой, пока один из двух не будет завершен. Удивительная вещь в том, что для SOA-магазина это очень важно, но вряд ли кто-то знает об этом.

Родни П. Барбати
источник
1

На этот вопрос нет однозначного ответа, так как каждый браузер имеет свою собственную конфигурацию, и эта конфигурация может быть изменена. Если вы выполняете поиск в Интернете, вы можете найти способы изменить это ограничение (обычно они обозначаются как «методы повышения производительности»). Возможно, стоит посоветовать вашим пользователям сделать это, если этого требует ваш веб-сайт.

Blixt
источник
Я повторяю, это не настраивается в браузере - или может быть, но все равно не будет иметь никакого эффекта. Именно сервер обеспечивает 2 соединения для каждого клиента, а не клиент или браузер на клиенте. Увеличение количества подключений в браузере позволит вам иметь 2 подключения к более разным серверам (т.е. вы можете загружать файлы с нескольких серверов одновременно, без проблем). Однако вы не можете загружать более двух файлов с одного сервера одновременно. Для этого сервер должен быть модифицирован.
Родни П. Барбати,
2
Конечно, этот ответ устарел, но он точен на момент написания. Во-первых, серверы редко значительно ограничивают количество соединений на один IP, поэтому я думаю, что вы ошибаетесь. Во-вторых, в 2009 году IE 7 все еще существовал, и на каждое имя хоста приходилось не более двух подключений. Это можно было настроить через системный реестр. Даже сегодня браузеры имеют ограничения, и они часто настраиваемы, но эти ограничения намного выше, чем тогда. В любом случае, с появлением SPDY / HTTP2 эта проблема стала значительно меньше, поскольку серверы и браузеры реализуют новый протокол.
Blixt
1
  1. Да, домен подстановки будет работать для вас.
  2. Не знает о каких-либо ограничений на соединения. Ограничения, если таковые имеются, будут зависеть от браузера.
Райан Оберой
источник