# Keep-alive и ротация

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


## Симптомы

- Сервис проверки IP несколько раз подряд возвращает один адрес, хотя идентификатор сессии не задан.
- Ресурс с лимитами по IP блокирует краулер, который якобы меняет адрес, но повторно использует пул из десяти соединений.


## Настройки для разных клиентов

| Клиент | Как получить новое соединение на каждый запрос |
| --- | --- |
| cURL | каждый отдельный запуск уже создаёт новое соединение |
| Python requests | requests.get(...) без Session, или headers={"Connection": "close"} |
| Node.js fetch / undici | новый ProxyAgent на каждый запрос, или pipelining: 1 с keepAliveTimeout: 0 |
| Go net/http | Transport.DisableKeepAlives = true |
| Браузеры | управлять этим нельзя; используйте закреплённую сессию и меняйте -sid- для ротации |


## Обратная задача

Если для нескольких запросов нужен один выходной IP, keep-alive помогает сохранить его в пределах одного соединения. Однако полагаться только на это не стоит: используйте [закреплённую сессию](https://hodlproxy.com/ru/glossary/sticky-session), чтобы адрес сохранялся и после сброса соединения.


## Как это работает в HodlProxy

Шлюзы HodlProxy выбирают выходной IP при открытии нового соединения и сохраняют его до закрытия этого соединения. Неактивные соединения закрываются через 60 секунд. Параметр -sid- явно закрепляет выбор IP и делает его независимым от соединения.

Источник: https://hodlproxy.com/ru/glossary/keep-alive
