IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Réponse HttpGet cachée pendant 10 minutes sur les Samsung Galaxy Sx/Note


Sujet :

Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut Réponse HttpGet cachée pendant 10 minutes sur les Samsung Galaxy Sx/Note
    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 )

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Tout le monde sèche ? Les experts Android sont en vacances ?

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    En théorie le "Cache control: no-cache" dans la requête devrait interdire l'utilisation d'un cache... à condition que Samsung respecte bien cela.

    Sinon il y a une solution "simple" et souvent utiliser pour passer outre les caches, c'est de générer une URL unique à chaque requête, via un paramètre GET.
    Par exemple au lieu d'accéder à la page http://www.msftncsi.com/ncsi.txt, tu demandes la page http://www.msftncsi.com/ncsi.txt?_=123456789 en changeant la valeur du paramètre à chaque appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String url = "http://www.msftncsi.com/ncsi.txt?_=" + System.currentTimeMillis();
    Le serveur va sûrement ignorer le paramètre et te renvoyer les mêmes données, mais les proxy et divers caches traitement cela comme une URL différente...


    a++

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Est-ce que c'est vraiment un bon plan pour la batterie d'aller interroger une url toutes les 5 minutes? Quand je vois comment ma batterie de tél se vide avec des service qui ne se synchronozent que toutes les 30 minutes, quelque chose me dit qu'un service qui checke auss souvent tuerait ma batterie en 2 heures

    Il ne serait pas préférable d'utiliser des méthodes dédiées à ça? Je trouve ceci avec un recherche rapide sur le net:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager 
              = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

  5. #5
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    La solution de _tchize ne répond pas à ta demande, mais juste histoire de la compléter :
    Prendre en compte un protail captif : http://grepcode.com/file/repository....nnection%28%29

    Ce qui me dérange plus est l'appli activant le wifi

    Pour le cache Samsung, je ne vois que la solution d'Adiguba.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    Rebonjour,

    je vais répondre aux trois messages d'un seul coup pour éviter de spamer le thread

    Citation Envoyé par adiGuba Voir le message
    ...
    En théorie le "Cache control: no-cache" dans la requête devrait interdire l'utilisation d'un cache... à condition que Samsung respecte bien cela.

    Sinon il y a une solution "simple" et souvent utiliser pour passer outre les caches, c'est de générer une URL unique à chaque requête, via un paramètre GET.
    ...
    J'avais déjà testé ces deux solutions sans succès (cf. mon premier post) mais je veux bien vérifier à nouveau cette semaine. A suivre.

    Citation Envoyé par tchize_ Voir le message
    Est-ce que c'est vraiment un bon plan pour la batterie d'aller interroger une url toutes les 5 minutes?
    ...
    Il ne serait pas préférable d'utiliser des méthodes dédiées à ça? Je trouve ceci avec un recherche rapide sur le net:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private boolean isNetworkAvailable() {...}
    Cette fonction rend vrai à partir du moment où tu es connecté sur un routeur....cela ne vérifie pas que la connexion Internet est OK.

    Pour info : je n'ai jamais dit que mon application lance cette requête toutes les 5 minutes...en réalité elle est lancée dans une sous-partie de ma vue "à propos" pour vérifier si je peux afficher un formulaire hébergé sur un serveur. Donc assez rare. Par contre, pour constater le bug sur les Samsungs je la lance plusieurs fois, en effet, mais ce n'est que pour étudier/corriger le bug.

    Citation Envoyé par Hizin Voir le message
    La solution de _tchize ne répond pas à ta demande, mais juste histoire de la compléter :
    Prendre en compte un protail captif : http://grepcode.com/file/repository....nnection%28%29
    Lien SO : http://stackoverflow.com/questions/1...rtal-detection
    Ce qui me dérange plus est l'appli activant le wifi

    Pour le cache Samsung, je ne vois que la solution d'Adiguba.
    J'ai déjà essayé avec UrlConnection également mais je vais retenter le coup.

    Merci !

  7. #7
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Perso, j'utilise le HttpUrlConnection pour soumettre mes requêtes et tout semble OK.
    Par contre l'activation et la connection au Wifi prend quelques secondes, cela m'inquiète
    Si la réponse vous a aidé, pensez à cliquer sur +1

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/11/2013, 20h32
  2. Impossible de créer un fichier sur mon samsung galaxy S
    Par gibsonSG_76 dans le forum Android
    Réponses: 7
    Dernier message: 02/07/2012, 16h37
  3. Notification de réponse sur les forums par RSS
    Par Lorponos dans le forum Dépannage et Assistance
    Réponses: 8
    Dernier message: 28/07/2006, 10h53
  4. Réponses: 4
    Dernier message: 05/07/2006, 10h16
  5. [Image]comment bloquer le cache sur les images?
    Par keiser1080 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 10/03/2006, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo