OVH Cloud OVH Cloud

HttpUrlConnection maintient adresse ip en cache

1 réponse
Avatar
Christophe Darville
Bonjour,

Je constate que la VM conserve en mémoire l'adresse ip associée à une url
dans le cas du code :

URL url = new URL("http://un.certain.domaine");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

Je m'explique: lorsque java resoud le domaine "un.certain.domaine" en un
adresse ip, il semble qu'il associe pour toujours (jusqu'au redémarrage de
la VM) cette ip à ce nom de domaine, et cela, même si l'ip associée à ce
domaine devait avoir changer. Ce qui veut dire que dans le cas de mon code,
on se connecte encore et toujours à la machine ayant l'ancienne adresse ip.

J'espérais que la commande
java.security.Security.setProperty("networkaddress.cache.ttl", "0");
solutionne ce problème, mais il n'en est rien. ce paramètre ne marche que
pour la classe InetAddress.

Quelqu'un aurait t'il une piste pour m'aider.

Merci,
Christophe

1 réponse

Avatar
Jean-Christophe Garnier
Bonjour,
En effet, au niveau InetAddress, le cache est perpétuel dans le cas
d'une résolution de nom qui a fonctionné. Regardez la classe
InetAddress, ce cas est expliqué. Il y a entre autres une propriété dans
le SecurityManager, qui se nomme networkaddress.cache.ttl et dont
l'initialisation à une autre valeur que -1 (la valeur par défaut)
pourrait faire revalider régulièrement cette adresse.
Exemple : java.security.Security.setProperty("networkaddress.cache.ttl",
"60"); a pour effet de garder la résolution de nom pendant 60 secondes
en cache (si cette résolution a réussi).

JC


Bonjour,

Je constate que la VM conserve en mémoire l'adresse ip associée à une url
dans le cas du code :

URL url = new URL("http://un.certain.domaine");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

Je m'explique: lorsque java resoud le domaine "un.certain.domaine" en un
adresse ip, il semble qu'il associe pour toujours (jusqu'au redémarrage de
la VM) cette ip à ce nom de domaine, et cela, même si l'ip associée à ce
domaine devait avoir changer. Ce qui veut dire que dans le cas de mon code,
on se connecte encore et toujours à la machine ayant l'ancienne adresse ip.

J'espérais que la commande
java.security.Security.setProperty("networkaddress.cache.ttl", "0");
solutionne ce problème, mais il n'en est rien. ce paramètre ne marche que
pour la classe InetAddress.

Quelqu'un aurait t'il une piste pour m'aider.

Merci,
Christophe