как имитировать браузер, у которого нет «Keep alive»

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

0
задан 19 July 2017 в 11:17
2 ответа

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

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

2
ответ дан 4 December 2019 в 12:19

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

1
ответ дан 4 December 2019 в 12:19

Теги

Похожие вопросы