У меня есть удаленный веб-сервер, прослушивающий порт 80, который обслуживает страницу, загружающую 100 отдельных .png
файлы (с того же сервера и имени хоста) через 100 <img />
теги. На этом удаленном сервере я делаю watch -n 1 "netstat -na | fgrep ":80 " | fgrep 123.123.123.123"
(где 123.123.123.123
это внешний IP-адрес моего клиентского компьютера), и когда я захожу на эту страницу, я обычно вижу около 5-6 подключений к серверу с моего клиентского компьютера. Я использую Chrome или Firefox для выполнения этого запроса страницы и, проверяя любой из этих запросов (либо страницы, либо любого из файлов png) с помощью инструментов F12 dev, я вижу заголовок запроса 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
Я был бы в порядке, если бы мне пришлось что-то делать на уровне O / S (Windows или Linux), чтобы отключить сохранение активности, использовать другой (даже пользовательский) браузер или даже использовать какой-то веб-прокси, который отменил бы это поведение для меня.
HTTP keep-alive означает, что клиент сообщает серверу, что он хочет оставить TCP-соединение открытым для дополнительных запросов, и просит сервер не закрывать его. Сервер может придерживаться этого желания или нет. Поскольку похоже, что сервер находится под вашим контролем, может быть проще просто отключить keep-alive на сервере, что, таким образом, приведет к остановке keep-alive для всех браузеров. Непонятно, какой у вас сервер, но соответствующие конфигурации для nginx здесь и для apache здесь.
Но хотя имеет смысл отключать или ограничивать HTTP keep-alive на сервере для сокращения используемых ресурсов, я задаюсь вопросом, почему вы хотите отключить его в клиенте. Хотя может быть интересно просто посмотреть, что происходит, поведение, которое вы видите в одном браузере, не будет применимо к другим браузерам и не будет применимо для определения нагрузки на сервер для конкретной страницы, поскольку даже без HTTP keep-alive браузеры все равно будут использовать только ограниченное количество параллельных подключений и не все запросы отправляются параллельно. И точное поведение зависит от браузера и конфигурации.
Когда-то в Firefox это было возможно с network.http.keep-alive
который больше не существует, так как постоянные соединения - одна из самых важных функций для производительности HTTP / 1.
Ваш network.http.keep-alive.timeout;0
не работает, потому что простоя не будет; соединения снова используются браузером, потому что есть еще файлы для GET
.
Даже без функции keep-alive браузер, вероятно, будет вежливым и запускать отдельные соединения после завершения последнего соединения, а не открывать 101 соединение одновременно.
Поскольку речь идет не о поддержании активности, а о количестве одновременных подключений, с Firefox вы можете протестировать network.http.max-persistent-connections-per-server; 101
. Однако я не совсем уверен, позволит ли это использовать смехотворно высокое значение ...