Keep-alive
Keep-alive — режим, в котором одно TCP-соединение с сервером используется для многих HTTP-запросов подряд.
Обновлено · Редакция Prokso
Каждый HTTP-запрос требует соединения с сервером. Без keep-alive клиент открывал бы новое TCP-соединение на каждый запрос, а для HTTPS ещё и заново проходил бы рукопожатие TLS. Keep-alive, или постоянное соединение, позволяет отправить много запросов одним соединением. В HTTP/1.1 это поведение по умолчанию.
Польза видна сразу. Меньше рукопожатий — меньше задержка, особенно когда сервер далеко. Меньше служебных пакетов — чуть меньше трафика. Сервер тоже тратит меньше ресурсов на открытие и закрытие соединений.
Постоянное соединение не живёт вечно. Сервер или клиент закрывает его после определённого времени без запросов или после определённого числа запросов, и тогда следующий запрос открывает новое соединение. В HTTP/2 идея пошла дальше: одно соединение может передавать несколько запросов параллельно. Для прокси это значит, что количество соединений и количество запросов — разные числа, и считать стоит именно соединения, особенно когда важно, с какого адреса идёт каждый запрос.
С прокси есть нюанс. Порт 823 (HTTP) и порт 824 (SOCKS5) на gw.prokso.com выдают новый IP на каждый запрос. Но на практике адрес выбирается, когда клиент открывает новое соединение со шлюзом. Если библиотека держит соединение открытым и шлёт через него несколько запросов, эти запросы могут выйти с одного адреса.
Чаще всего так бывает с сессиями в библиотеках. Например, объект Session в Python requests хранит пул соединений и использует их повторно. Для HTTPS через CONNECT все запросы внутри одного туннеля идут одним маршрутом, а значит, и с одного адреса.
Если вам нужен новый адрес для каждого запроса, открывайте новое соединение: закрывайте сессию, отключайте повторное использование или отправляйте заголовок Connection: close. Если, наоборот, IP должен быть одинаковым, лучше не полагаться на keep-alive, а взять порт с фиксированным IP из диапазона 10000–20000. Примеры настроек есть в инструкции Python requests.
В любом случае проверяйте результат. Отправьте несколько запросов на страницу мой IP так же, как это делает ваш скрипт, и посмотрите, меняется ли адрес. Так вы увидите реальное поведение вашей библиотеки, а не ожидаемое. Подробнее о смене адресов читайте в статье ротационный прокси.
Вопросы и ответы
Почему на порту с новым IP несколько запросов ушли с одного адреса?
Скорее всего, библиотека повторно использовала одно соединение. Новый IP выбирается при новом соединении со шлюзом, поэтому закрывайте сессию или отправляйте Connection: close и проверяйте результат на странице «мой IP».
Экономит ли keep-alive трафик?
Немного экономит: меньше рукопожатий TCP и TLS означает меньше служебных данных. Главная же польза — меньшая задержка на каждый запрос.
Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ
Регистрация за минуту, доступы сразу после оплаты.