Tous les emplacements actifs · 99.99% uptime
Protocoles

Keep-Alive et pool de connexions sur un proxy

Le changement le plus efficace à lui seul pour améliorer les performances d'un proxy n'est pas d'acheter un proxy plus rapide ; c'est de réutiliser la connexion existante. Un client qui ouvre une nouvelle connexion pour chaque requête paie en permanence le coût d'établissement de la connexion, et ce coût se démultiplie lorsqu'il passe par un proxy.

Le coût réel de l'établissement d'une connexion

FIGURELes étapes de la première connexion via un proxy
INSTALLATION01DNSrésolution~20 msAdresse du proxypour02Handshake TCP~35 msClient ↔ proxy03Identifiants proxy~35 ms407 → nouvelenvoi04CONNECTtunnel~35 msOuverture du tunnel05Handshake TLS~70 msClient ↔ cible06Première requêtevariableDonnées utilescoût fixe total ~200 ms

Ces 200 ms sont repayées à chaque nouvelle connexion. Si vous envoyez 1 000 requêtes en ouvrant une nouvelle connexion à chaque fois, vous dépensez 200 secondes rien qu'en établissement.

Comment fonctionne le Keep-Alive ?

En HTTP/1.1, les connexions sont persistantes par défaut : la connexion ne se ferme pas après la réception de la réponse, la requête suivante est envoyée sur le même socket. Trois choses cassent ce comportement :

  • Le serveur Connection: close envoie — la connexion est fermée.
  • Le client crée un nouvel objet session à chaque requête — le pool ne fonctionne jamais.
  • Le délai d'inactivité est dépassé — le proxy ou le serveur coupe la connexion.
L'erreur la plus courante

Créer dans le code un nouvel objet Session, Client ou Agent pour chaque requête. Cela désactive totalement la réutilisation des connexions, quelle que soit votre configuration de pool.

La bonne configuration

FIGURERéutiliser la connexion
Configuration du pool selon le langage01# Python requests — la Session est créée une seule fois02import requests03session = requests.Session()04session.proxies = {"https": "http://kullanici:sifre@proxy.example.com:8080"}05adapter = requests.adapters.HTTPAdapter(pool_connections=16, pool_maxsize=16)06session.mount("https://", adapter)07for url in urls:08 r = session.get(url, timeout=25) # la même connexion est réutilisée0910# Python httpx — déclarez explicitement les limites11import httpx12limits = httpx.Limits(max_connections=16, max_keepalive_connections=16,13 keepalive_expiry=60.0)14client = httpx.Client(limits=limits, proxy=PROXY, timeout=25.0)1516# Node.js undici17import { Agent, setGlobalDispatcher } from "undici";18setGlobalDispatcher(new Agent({ connections: 16, keepAliveTimeout: 60_000 }));

Gardez la taille du pool juste en dessous de la limite de concurrence de votre fournisseur. Si vous la dépassez, des connexions supplémentaires sont ouvertes puis immédiatement fermées.

Quel est le gain ?

FIGUREDurée totale pour 1 000 requêtes
MESURE061122183244Sans pool (nouvelle connexion)Avec pool (keep-alive)1002505007501000

Dans cette mesure d'exemple, l'utilisation d'un pool réduit la durée totale à environ un tiers. Le gain augmente à mesure que la latence vers le proxy s'accroît.

Réutilisation de session TLS

À côté du pool de connexions, il existe une deuxième source de gain : le ticket de session TLS. Lors d'une reconnexion vers la même cible, un handshake abrégé peut remplacer le handshake complet. La plupart des clients modernes le font automatiquement ; l'essentiel est de réutiliser l'objet client.

FIGUREHandshake TLS complet et handshake abrégé
TLSHandshake completRéutilisation de sessionNombre d'allers-retours2 RTT1 RTTTransmission du certificatOuiAucunCalcul des clésTotalAbrégéDurée typique70–140 ms30–60 msConditionPremière connexionMême objet client

Si vous recréez l'objet client à chaque requête, le ticket de session est perdu et un handshake complet est effectué à chaque fois.

L'équilibre du délai d'inactivité

Garder une connexion ouverte trop longtemps peut aussi poser problème : le proxy ou le serveur cible peut couper la connexion silencieusement et votre client ne s'en apercevra qu'à la requête suivante. D'où le schéma « la première requête échoue, la seconde réussit ».

RéglageRecommandéPourquoi
keepalive_expiry30–60 sDoit être inférieur au timeout du serveur
Taille du poolEn dessous de la limite de concurrenceAu-delà, des handshakes pour rien
Nouvelle tentative1 foisCompense une connexion coupée
Limite de durée de vie des connexions5–10 minLes connexions à longue durée de vie s'éventent
Conseil pratique

Gardez le délai d'inactivité plus court que le timeout du serveur. Ainsi c'est vous qui fermez la connexion et la situation « le serveur a fermé mais je l'ignore » ne se produit pas.

Le conflit avec la rotation

La réutilisation des connexions et la rotation d'IP s'opposent naturellement : utiliser la même connexion revient à rester sur la même IP de sortie. Ce n'est pas un problème, c'est un arbitrage :

FIGUREPool ou rotation ?
DÉCISIONRester sur la même IP pose-t-il problème ?Non, une session est nécessaireOUIRéglez le pool au maxim…NONVoir ci-dessousGain de vitesse maximalEn partie — la même IP peut durer un momentOUIPool + renouvellement pér…NONVoir ci-dessousLe point d'équilibreOui, une IP différente à chaque requête est indispensableOUIDésactivez le poolNONAcceptez le coût en vite…

Dans la plupart des scénarios, la deuxième option est la bonne : réutilisez la connexion un certain temps (par exemple 30 requêtes ou 5 minutes), puis renouvelez-la.

Pour les stratégies de rotation, notre article sur les réglages de rotation vous pouvez le consulter.

Résumé

Le keep-alive et le pool de connexions constituent le principal levier des performances proxy. Créez l'objet client une seule fois et réutilisez-le, gardez la taille du pool en dessous de la limite du fournisseur, réglez le délai d'inactivité en deçà du timeout du serveur et ajoutez une seule nouvelle tentative. Si vous avez besoin de rotation, préférez un renouvellement périodique à la désactivation du pool. Pour la mesure, test de ping et vérification de proxy vous pouvez utiliser nos outils.

Questions fréquentes

01Le keep-alive fonctionne-t-il à travers un proxy ?

Oui. Une fois le tunnel CONNECT établi, vous pouvez faire passer plusieurs requêtes dans le même tunnel. Les connexions persistantes sont également prises en charge sur un proxy HTTP simple.

02Comment choisir la taille du pool ?

Gardez-la juste en dessous de la limite de concurrence de votre fournisseur. Si vous la dépassez, des connexions supplémentaires sont ouvertes puis immédiatement fermées et le coût des handshakes est perdu.

03La première requête échoue, les suivantes passent — pourquoi ?

La connexion présente dans le pool a peut-être été fermée silencieusement par le serveur. Gardez le délai d'inactivité plus court que le timeout du serveur et ajoutez une seule nouvelle tentative.

04Le pool de connexions empêche-t-il la rotation d'IP ?

Oui, une même connexion reste sur la même IP de sortie. Si vous avez besoin de rotation, plutôt que de désactiver complètement le pool, renouvelez la connexion après un certain nombre de requêtes ou une certaine durée.

05Qu'apporte la réutilisation de session TLS ?

Un handshake abrégé remplace le handshake complet ; cela économise typiquement un aller-retour et 40 à 80 ms. Il vous suffit de réutiliser l'objet client.

Articles et pages associés

ÉTAPE SUIVANTE

Renforcez votre infrastructure proxy dès aujourd'hui.

Démarrez en quelques minutes avec un forfait payant, ou essayez d'abord notre liste de proxys gratuits.

FREEPROXY.TR

Vous cherchez un proxy gratuit ? Vous êtes au bon endroit

Une plateforme proxy complète pour consulter des adresses de proxy gratuits à jour, comparer les types HTTP et SOCKS et vérifier vos connexions proxy avec des outils gratuits.