Максимальное количество параллельных HTTP-соединений в браузере?

Я создаю несколько приостановленных подключений к 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 в качестве примера.

Ответ 1

Максимальное количество одновременных постоянных подключений по умолчанию для сервера/прокси:

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

Ответ 3

 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, максимальное количество подключений, которые браузер открывает в общей сложности - для всех доменов.

Ответ 4

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

Ответ 5

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

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

Ответ 6

Выполняя тестирование на странице, я увидел это поведение:

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

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

Ответ 7

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

Ответ 8

Посмотрев about:config на Firefox 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-соединений)

Ответ 9

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

Ответ 10

  • Да, подстановочный домен будет работать для вас.
  • Не известно о каких-либо ограничениях на соединения. Ограничения, если таковые имеются, будут специфическими для браузера.

Ответ 11

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

Ответ 12

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

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

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