Bonjour à tous,
j'ai un problème avec les smartphone et tablette Samsung Galaxy qui visiblement mettent en cache la réponse à une requête GET pendant dix minutes.
Dans certains cas ce n'est gênant mais dans mon cas il s'agit d'une requête qui vérifie que l'accès Internet est OK de bout en bout.
J'utilise le service de Microsoft à l'url suivante : http://www.msftncsi.com/ncsi.txt
Le test que je fais, c'est que je lance une première fois cette requête (avec le HttpClient Apache embarqué dans Android) quand Internet est KO puis je remet Internet en marche et je fais une deuxième requête identique.
Cela fonctionne très bien sur tous les smartphones ou tablettes de mes utilisateurs SAUF ceux qui ont un Samsung car la réponse de la première requête continue d'être rendue pendant 10 minutes même si Internet est OK.
Le plus drôle c'est que même le navigateur Internet du GS4 est bloqué pour cette requête...par contre, en supprimant le cache dans le navigateur le problème est corrigé...
Les codes HTTP retournés :
- première requête (Internet KO) : 302
- deuxième requête (Internet OK) : 404
Voici donc ma question : comment faire la même chose que le navigateur et supprimer le cache ? Ou comment éviter que ma réponse soit mise en cache ?
Pour info, j'ai tenté plusieurs solutions dans la journée dont :
- appel à une fonction un peu cachée de InetAdress : clearDnsCache().
- ajout d'un paramètre à valeur aléatoire à chaque requête.
- ajout d'un header "no-cache" même si j'ai bien saisi qu'il fallait aussi que le serveur le mette dans sa réponse.
- utilisation de UrlConnection à la place de HttpClient.
- passage en HTTPS avec gestion du fait que le serveur ne donne pas de certif (là j'étais désespéré).
Voilà, c'est chaud...j'ai encore la piste d'exploration des répertoires du cache HTTP pour trouver et virer la partie du cache qui m'embête mais je ne pense pas pouvoir le faire sans être root...
Amis développeurs, à vot' bon cœur !
Et merci d'avance pour votre aide (ou au moins pour m'avoir lu et réfléchi quelques secondes pour m'aider )
Partager