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 ГБ
Реєстрація за хвилину, доступи одразу після оплати.