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

Serveurs (Apache, IIS,...) Discussion :

HTTP : comment gérer le cache ?


Sujet :

Serveurs (Apache, IIS,...)

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut HTTP : comment gérer le cache ?
    Bonjour,

    lorsque j'ouvre une page web sur mon serveur custom voici le genre d'entêtes HTTP qu'il me renvoie :

    emission (firefox) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    GET /common.js HTTP/1.1
    Host: 10.0.200.5
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
    Accept: */*
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Referer: http://10.0.200.5/protect/monitoring.htm
    réponse du serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HTTP/1.1 200 OK
    Connection:close
    Content-Encoding:gzip
    Cache-Control:max-age=600
    
    ... les données du fichier
    => le problème est que ma page est rechargée à chaque ouverture : "Cache-Control:max-age=600" n'a pas l'air de fonctionner
    Quels sont les paramètres qu'il manque dans la réponse de mon serveur ?

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Petit extrait de la page Wikipédia de l'en-tête Cache-Control concernant la directive max-age :
    Cette directive indique au cache que le client veut un document dont la fraîcheur est au maximum l'âge indiqué en seconde.

    Cache-Control: max-age=600

    Avec cette directive, le cache est sollicité pour renvoyer un document qui a été produit il y a au plus 10 minutes (en-tête Date). Sinon le serveur d'origine est contacté pour obtenir une version plus récente.
    Cette directive s'adresse à un serveur de cache (un proxy vraisemblablement) se trouvant entre le client et le serveur, pour dire comment ce cache intermédiaire doit gérer la ressource. Vu qu'un tel dispositif n'existe pas sur ton réseau, c'est logique que le client contacte directement le serveur et ignore l'instruction max-age du serveur.

    A mon avis, il faut plutôt utiliser max-stale ou alors Expires, qui me semble être plus reconnue que Cache-Control pour la gestion du cache navigateur.


    Au passage, il faut un espace après les : dans les en-têtes de réponse de ton serveur.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    c'est bizarre c'est "max-age" qui était utilisé par défaut dans la configuration de mon serveur... si on ne peut même plus faire confiance aux piles logiciels mais ou va t-on lol (les espaces c'est moi qui les avaient virés pour gagner de l'espace mémoire sur mon micro-contrôleur (serveur) :p)

    j'ai donc fait des tests avec max-stale mais j'ai toujours le problème

    voici mes requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    GET /theme1.css HTTP/1.1
    Host: 10.0.200.5
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
    Accept: text/css,*/*;q=0.1
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Referer: http://10.0.200.5/protect/monitoring.htm
    
    
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: text/css
    Content-Encoding: gzip
    Cache-Control: max-stale=600
    
    ... code de ma page css (j'ai le même type de requete avec les autres type de fichiers)
    => qu'est-ce qu'il pourrait y avoir d'autre ?

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    A part essayer de passer un Expires à la place du Cache-Control, je n'ai pas d'idée.

    Tu captures tes traces HTTP comment ? As-tu comparé avec un site pour lequel tu sais qu'il y a une gestion du cache ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    A part essayer de passer un Expires à la place du Cache-Control
    => mon serveur n'a pas d'horloge donc je ne peux définir la date d'expiration vu qu'il ne connait pas la date actuelle ...


    Citation Envoyé par _Mac_ Voir le message
    Tu captures tes traces HTTP comment ?
    => avec firebug. Dans l'onglet cache ça me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Thu Mar 18 2010 15:32:03 GMT+0100
    Last Fetched	Thu Mar 18 2010 15:32:03 GMT+0100
    Expires	Thu Jan 01 1970 01:00:00 GMT+0100
    Data Size	1867
    Fetch Count	2
    Device	disk
    => j'ai l'impression qu'il faut utiliser Expires vu que max-stale n'y ai pas



    Citation Envoyé par _Mac_ Voir le message
    As-tu comparé avec un site pour lequel tu sais qu'il y a une gestion du cache ?
    => je n'en trouve pas : c'est quand même bizarre, personne ne cherche a gagner de la bande passante sur son serveur ?
    C'est normal que quand je me ballade sur www.developpez.net, j'ai l'impression que les .css et les images sont rechargées a chaque fois ?

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est la question : j'ai l'impression que les outils du genre Firebug ou LiveHttpHeaders affichent des requêtes GET même sur les objets placés en cache. Pour voir s'il y a vraiment une connexion au serveur, il faut utiliser un outil du genre Wireshark qui permet de réellement voir ce qui passe sur le réseau. Mais vu que tu as "Expires Thu Jan 01 1970 01:00:00 GMT+0100" dans l'onglet de cache de Firebug, il y a effectivement toutes les chances que Firefox considère que le fichier est trop vieux et qu'il faut le redemander à chaque fois.

    Ce doc fait plus ou moins office de référence sur le sujet : tu l'as lu ? max-age semble effectivement la solution pour ton cas : que raconte l'onglet cache de Firebug dans ce cas ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    c'est bon j'ai trouvé... mes pages s'affichent super rapidement maintenant

    max-age fonctionne (ce qui n'est pas le cas de max-stale) : ça ne fonctionnait pas à cause de firebug => il faut cliquer sur la petite fleche l'onglet "Réseau" et désactiver l'option "Désactiver la cache de Firefox"

    merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Delphi/WebService] Comment gérer une session HTTP (cookie) ?
    Par adrien_as dans le forum Web & réseau
    Réponses: 3
    Dernier message: 20/03/2009, 11h55
  2. Comment gérer la touche echap ?
    Par Adrael dans le forum C
    Réponses: 28
    Dernier message: 11/07/2003, 13h15
  3. Comment gérer les espaces blancs?
    Par Lambo dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 16/05/2003, 09h44
  4. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55

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