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