Keep-alive

Keep-alive to tryb, w którym jedno połączenie TCP z serwerem służy do wysłania wielu zapytań HTTP po kolei.

Zaktualizowano · Redakcja Prokso

Każde zapytanie HTTP wymaga połączenia z serwerem. Bez keep-alive klient otwierałby nowe połączenie TCP dla każdego zapytania, a przy HTTPS dodatkowo powtarzałby uzgadnianie TLS. Keep-alive, czyli połączenie trwałe, pozwala wysłać wiele zapytań jednym połączeniem. W HTTP/1.1 to zachowanie domyślne.

Korzyść widać od razu. Mniej uzgodnień to mniejsze opóźnienie, zwłaszcza gdy serwer jest daleko. Mniej pakietów technicznych to nieco mniej ruchu. Serwer również zużywa mniej zasobów na otwieranie i zamykanie połączeń.

Połączenie trwałe nie żyje wiecznie. Serwer lub klient zamyka je po pewnym czasie bez zapytań albo po określonej liczbie zapytań, i wtedy kolejne zapytanie otwiera nowe połączenie. HTTP/2 idzie dalej: jedno połączenie może przenosić kilka zapytań równolegle. Dla proxy oznacza to, że liczba połączeń i liczba zapytań to różne liczby, i liczyć warto właśnie połączenia, zwłaszcza gdy ważne jest, z jakiego adresu wychodzi każde zapytanie.

Przy proxy jest pewien niuans. Port 823 (HTTP) i port 824 (SOCKS5) na gw.prokso.com dają nowy adres IP przy każdym zapytaniu. W praktyce jednak adres jest wybierany wtedy, gdy klient otwiera nowe połączenie z bramką. Jeśli biblioteka trzyma połączenie otwarte i wysyła przez nie kilka zapytań, mogą one wyjść z tego samego adresu.

Najczęściej dzieje się tak z sesjami w bibliotekach. Na przykład obiekt Session w Python requests przechowuje pulę połączeń i używa ich ponownie. Przy HTTPS przez CONNECT wszystkie zapytania w jednym tunelu idą tą samą trasą, a więc z tego samego adresu.

Jeśli potrzebujesz nowego adresu dla każdego zapytania, otwieraj nowe połączenie: zamykaj sesję, wyłącz ponowne użycie połączeń albo wysyłaj nagłówek Connection: close. Jeśli z kolei IP ma być taki sam, nie polegaj na keep-alive, tylko użyj portu ze stałym IP z zakresu 10000-20000. Przykłady ustawień znajdziesz w instrukcji Python requests.

W każdym przypadku sprawdzaj wynik. Wyślij kilka zapytań na stronę mój IP tak samo, jak robi to Twój skrypt, i zobacz, czy adres się zmienia. Tak zobaczysz rzeczywiste zachowanie swojej biblioteki, a nie oczekiwane. Więcej o zmianie adresów przeczytasz w artykule proxy rotacyjne.

Pytania i odpowiedzi (FAQ)

Dlaczego kilka zapytań na porcie z nowym IP wyszło z jednego adresu?

Najpewniej biblioteka ponownie użyła jednego połączenia. Nowy IP jest wybierany przy nowym połączeniu z bramką, więc zamykaj sesję lub wysyłaj Connection: close i sprawdzaj wynik na stronie „mój IP”.

Czy keep-alive oszczędza ruch?

Trochę: mniej uzgodnień TCP i TLS to mniej danych technicznych. Główna korzyść to jednak mniejsze opóźnienie przy każdym zapytaniu.

Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB

Rejestracja w minutę, dostęp od razu po płatności.

Utwórz konto