Как эмулировать браузер, который не имеет "сохранить в живых"

У меня есть удаленный веб-сервер, прослушивающий порт 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, я вижу заголовок запроса Connection:keep-alive, Я также подтверждаю, просматривая журналы веб-сервера, что все эти запросы выполняются с использованием HTTP/1.1 который, я думаю, использует по-прежнему живой.

Все вышеперечисленные факты и наблюдения означают, что 101 запрос (1 страница + 100 pngs) проходит через 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), чтобы отключить поддержку активности, использовать другой (даже пользовательский) браузер или даже использовать какой-либо веб-прокси, который бы отменил это поведение для меня.

2 ответа

HTTP keep-alive означает, что клиент объявляет серверу, что он хочет оставить TCP-соединение открытым для дополнительных запросов, и просит сервер не закрывать его. Сервер может придерживаться этого желания или нет. Поскольку кажется, что сервер находится под вашим контролем, может быть проще отключить keep-alive на сервере, что приведет к остановке keep-alive для всех браузеров. Не ясно, какой у вас сервер, но соответствующие конфигурации для nginx здесь и для apache здесь.

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

Когда-то в Firefox это было возможно с network.http.keep-alive его больше не существует, потому что постоянные соединения являются одной из наиболее важных функций для производительности HTTP/1.

Ваш network.http.keep-alive.timeout;0 не работает, потому что не будет простоев; браузер немедленно снова использует соединения, потому что есть еще файлы для GET,

Даже без функции keep-alive браузер, вероятно, будет вежливым и будет запускать отдельные подключения после завершения последнего подключения, а не открывать одновременно 101 подключение.

Поскольку речь идет не о keep-alives, а о количестве одновременных подключений, с Firefox вы можете протестировать network.http.max-persistent-connections-per-server; 101, Тем не менее, я не совсем уверен, позволит ли это даже использовать смехотворно высокое значение...

Другие вопросы по тегам