Comment forcer la mise à jour du cache navigateur ?



  • Bonjour à toutes et tous !

    J'ai des directives dans mon htaccess visant à utiliser le cache navigateur pourt certains fichiers, notamment le css et les images.

    <IfModule mod_headers.c>
    # les .ico, .jpg, etc… seront en cache pour 30 jours
    <FilesMatch "\.(ico|jpe?g|png|gif|swf|css|gz)$">
    RequestHeader unset Cookie
    Header unset Set-Cookie
    Header set Cache-Control "max-age=2592000, public"
    Header set Last-Modified "Tue, 23 Nov 2017 15:00:00 GMT"
    </FilesMatch>
    <FilesMatch "\.(js)$">
    Header set Cache-Control "max-age=2592000, private"
    </FilesMatch>
    # Disable caching for scripts and other dynamic files
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
    Header unset Cache-Control
    </FilesMatch>
    </IfModule>
    

    Mais à certaines périodes, j'ai besoin que le visiteur puisse charger les dernières versions de ces fichiers, même si il a visité le site la veille, lors d'un changement d'habillage pour un événement par exemple.
    La mise à 0 du max-age désactiverait totalement la mise en cache, donc sans intérêt.

    Mes recherches m'ont dirigées vers l'instruction "last-modified" qui permettrait d'indiquer au navigateur une date de modification des fichiers afin qu'il les recharge si sa version est plus ancienne, mais mes essais ne fonctionnent pas.
    Header set Last-Modified "Tue, 23 Nov 2017 15:00:00 GMT" ne fait pas effet.

    erreur de syntaxe ? une autre méthode ?
    Merci


  • administrators

    Les navigateurs (surtout chrome) en ont de moins en moins a faire des directives de cache. Ils font leurs sauce au mépris des RFC, et ils ne suivent pas tous les même règle en plus. Mais, ici dans ton cas, le meilleur moyen de forcer le refresh est de changer le nom des resources.

    Les css/js minifiés sont normalement correctement "taggué", et pour tes images, charge à toi de leur changer le nom. L'ajout d'un query string (?rand=xxxxx) peut être utilisé (avec parcimonie).

    Je ne crois pas que les directives unset Cookie et unset Set-Cookie aient une utilité. Le contenu est ici statique donc, éliminer le Cookie de l'entête ne sert a rien (il a déjà été envoyé et a consommé le bande passante). Le Set-Cookie est à l'initiative du serveur et, étant une resource statique, aucun Set-Cookie n'est retourné.

    Tu as ici 2 directives qui s'opposent, l'une donne une date à laquelle le fichier aurait été modifié (la RFC dit que cette date est supposé), mais l'autre spécifie qu'une resource peut être en cache 30 jours le navigateur (dans le but d'une meilleure expérience utilisateur) va probablement choisir les 30 jours. Le "public" spécifie d'ailleurs que des proxies ont le droit de cacher ce contenu.



  • Je reviens là dessus.
    J'ai le problème sur les miniatures des sous-catégories.
    Pourtant l'URL de l'image a bien été modifiée, ce qui devrait forcer le navigateur a charger la nouvelle image.
    Mais en fait c'est uniquement l'URL rewritée qui a été modifiée. L'URL "réelle" est toujours la même, du type img/c/{$id_category}-category_default.jpg d'où le problème je pense.
    Là c'est le fonctionnement natif de Prestashop, donc le problème devrait être commun à tous les utilisateurs.


Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.