У меня есть удаленный веб-сервер, прослушивающий порт 80, который обслуживает страницу, загружающую 100 отдельных файлов .png
(с того же сервера и имени хоста) через 100 теги
. На этом удаленном сервере я
смотрю -n 1 "netstat -na | fgrep": 80 "| fgrep 123.123.123.123"
(где 123.123.123.123
- это внешний IP-адрес моего клиентского компьютера), и когда я захожу на эту страницу, я обычно вижу около 5-6 подключений к серверу с моего клиентского компьютера. Я использую chrome или firefox для выполнения этого запроса страницы и, проверяя любой из этих запросов (либо страницы, либо любого из файлов png) с помощью инструментов разработчика F12, я вижу заголовок запроса Connection: keep-alive
. Я также подтверждаю, просматривая журналы веб-сервера, что все эти запросы выполняются с использованием HTTP / 1.1
, который, как мне кажется, по умолчанию использует keep alive.
Все приведенные выше факты и наблюдения означают, что 101 запрос ( 1 страница + 100 png) проходят через 5-6 соединений, а не через 101 соединение.
Мой вопрос, как отключить сохранение активности в chrome или firefox?
В firefox я попытался установить следующее в about: config
, но это ничего не изменило в этом поведении:
network.http.keep-alive.timeout;0
network.http.tcp_keepalive.long_lived_connections;false
network.http.tcp_keepalive.long_lived_idle_time;0
network.http.tcp_keepalive.short_lived_connections;false
network.http.tcp_keepalive.short_lived_idle_time;0
network.http.tcp_keepalive.short_lived_time;0
network.tcp.keepalive.enabled;false
network.tcp.keepalive.idle_time;0
network.tcp.keepalive.retry_interval;0
Я буду в порядке если бы мне пришлось что-то сделать на уровне ОС (Windows или Linux), чтобы отключить сохранение активности, использовать другой (даже собственный) браузер или даже какой-то веб-прокси, который отменил бы это поведение для меня.
HTTP keep-alive означает, что клиент сообщает серверу, что он хочет оставить TCP-соединение открытым для дополнительных запросов, и просит сервер не закрывать его. Сервер может придерживаться этого желания или нет. Поскольку похоже, что сервер находится под вашим контролем, может быть проще просто отключить keep-alive на сервере, что, таким образом, приведет к остановке keep-alive для всех браузеров. Непонятно, какой у вас сервер, но соответствующие конфигурации для nginx находятся здесь и для apache здесь .
Но, хотя имеет смысл отключить или ограничить HTTP keep- на сервере, чтобы уменьшить используемые ресурсы. Интересно, почему вы хотите отключить его в клиенте. Хотя может быть интересно просто посмотреть, что происходит, поведение, которое вы видите в одном браузере, не будет применимо к другим браузерам и не будет применимо для определения нагрузки на сервер для конкретной страницы, поскольку даже без HTTP keep-alive браузеры все равно будут использовать только ограниченное количество параллельных подключений и не все запросы отправляются параллельно. И точное поведение зависит от браузера и конфигурации.
Когда-то в Firefox это было возможно с помощью network.http.keep-alive
, который больше не существует , потому что ] постоянные соединения - одна из наиболее важных функций для производительности HTTP / 1 .
Ваша сеть.http.keep-alive.timeout; 0
не работает, потому что не будет любой простой; браузер немедленно снова использует соединения, потому что для GET
есть еще файлы.
Даже без сохраненияalive, браузер, вероятно, будет вежливым и будет запускать отдельные соединения после завершения последнего соединения, а не открывать одновременно 101 соединение.
Поскольку речь идет не о keep-alives, а о количестве одновременных соединений, с Firefox вы можете протестировать network.http.max-persistent-connections-per-server; 101
. Однако я не совсем уверен, позволит ли это использовать смехотворно высокое значение ...