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

Apache Discussion :

La mise en cache avec .htaccess


Sujet :

Apache

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut La mise en cache avec .htaccess
    Bonjour, je cherche à optimiser la navigation de mon site Internet, et pour cela j'ai défini une durée de mise en cache des fichiers dans mon .htaccess.
    Seulement, je souhaite mettre en cache toutes les images, fichiers css et fichiers javascript pour 1 semaine, à l'exception d'un fichier javascript.
    J'ai donc tenté de mettre ceci dans mon .htaccess, mais comment savoir si ce code est bon ou si ça ne sert à rien ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <FilesMatch ".(gif|jpg|jpeg|png|ico|swf|js|css|pdf|xls|css|js)$">
    Header set Cache-Control "max-age=604800"
    </FilesMatch>
    <FilesMatch "monfichier.js">
    Header unset Cache-Control
    </FilesMatch>
    Merci d'avance.

  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
    En testant ?

    Avant tout, vide le cache de ton navigateur. Ensuite, il te faut un outil du genre LiveHttpHeaders sur Firefox ou plus gros du genre Wireshark pour voir les en-têtes HTTP renvoyés par le serveur Web. Ce que tu peux peut-être aussi faire avec Firefox c'est télécharger 2 ou 3 fichiers .js et .css différents directement (en tapant leur URL dans la barre d'adresse) et de faire un clic droit > Informations sur la page : y a peut-être un champ qui parle du cache.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Pas faux !!
    Je vais tester ça

    Edit :
    Alors avec livehhtpheaders je peux lire pour un fichier js "GET /css/jQuery/plugins.js HTTP/1.1 : Cache-Control: max-age=0" et "HTTP/1.1 304 Not Modified : Cache-Control: max-age=604800".

    J'ai un peu du mal à comprendre ce que cela signifie.

  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
    Les 604800, c'est la durée de validité de la ressource demandée (/css/jQuery/plugins.js) en secondes. 604800 secondes, ça fait 7 jours.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Oui ça ok, mais pourquoi y a-t-il deux valeurs différentes de Cache-Control: max-age pour un même fichier ?

  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
    Le premier max-age est envoyé par le navigateur. Il veut dire que le navigateur veut le document le plus récent possible par rapport à l'en-tête Date qu'il a dû envoyé également. Le second max-age indique au navigateur que la ressource qu'il a déjà n'expirera que dans 604800 secondes.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    D'accord, ce qui veut dire que mon htaccess ne fonctionne pas, sinon je n'aurai pas le second max-age à 604800 secondes !

  8. #8
    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
    Ben dans la mesure où ton .htaccess contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Header set Cache-Control "max-age=604800"
    je dirais au contraire qu'il marche très bien

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Oui, mais je lui demande effectivement de garder en cache 7 jours les fichiers, sauf monfichier.js !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <FilesMatch ".(gif|jpg|jpeg|png|ico|swf|pdf|xls|css|js)$">
    Header set Cache-Control "max-age=604800"
    </FilesMatch>
    <FilesMatch "monfichier.js">
    Header unset Cache-Control
    </FilesMatch>
    Et c'est l'entête de ce fichier où justement je retrouve le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Header set Cache-Control "max-age=604800"
    alors que logiquement si ça fonctionnait il devrait y avoir max-age=0 non ?

  10. #10
    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'était pas évident à comprendre : ta trace HTTP parle de /css/jQuery/plugins.js : comment savoir que c'était le fichier à ne pas mettre en cache ?

    Sinon, essaie de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Header set Cache-Control "max-age=0"
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Header unset Cache-Control
    Essaie également de déplacer ton bloc <FilesMatch "monfichier.js"> avant l'autre <FilesMatch>.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    C'était pas évident à comprendre : ta trace HTTP parle de /css/jQuery/plugins.js : comment savoir que c'était le fichier à ne pas mettre en cache ?
    Alors oui, désolé, c'est une faute de frappe, il faut lire monfichier.js et non pas plugins.js !!

    J'ai donc essayé les deux propositions, à savoir déplacer le bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FilesMatch "monfichier.js">
    avant l'autre et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Header set Cache-Control "max-age=0"
    , et aucun changement.

    J'ai également essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FilesMatch "monfichier.js">
    ainsi qu'avec son chemin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FilesMatch "/css/jQuery/monfichier.js">
    comme dans le header, mais aucun changement non plus !

  12. #12
    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
    Juste pour le test : tu peux commenter tout le bloc <FilesMatch ".(gif|jpg|jpeg|png|ico|swf|pdf|xls|css|js)$"> et vérifier que la conf pour ton fichier fonctionne ?

    ce que je crains c'est que ce bloc <FilesMatch ".(gif|jpg|jpeg|png|ico|swf|pdf|xls|css|js)$"> prend le pas sur l'autre car il est plus générique. J'ai peur qu'il faille faire plusieurs blocs pour implémenter le "tous les .js sauf monfichier.js" car je ne vois pas de syntaxe d'expression régulière qui colle (mais peut-être qu'elle existe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <FilesMatch "\.(gif|jpg|jpeg|png|ico|swf|pdf|xls|css)$">
    ...
    </FileMatch>
     
    <FilesMatch "(?!monfichier)\.js">
    ...
    </FileMatch>
     
    <FilesMatch "monfichier\.js">
    ...
    </FilesMatch>

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    C'était ça : le bloc <FilesMatch ".(gif|jpg|jpeg|png|ico|swf|pdf|xls|css|js)$"> prenait le pas sur l'autre car plus générique !!

    Je n'ai effectivement pas réussi à trouver une syntaxe "tous les .js sauf monfichier.js" qui fonctionne, donc pour les .js j'ai fait des blocs séparés. Cette solution me parait donc pas trop mal !

    Merci bcp

  14. #14
    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
    Tu n'as pas essayé ma syntaxe ? Elle est un peu tordue mais tu as un premier bloc pour dire "tout ce qui se termine en .js et qui ne commence pas par monfichier" et tu as le bloc pour monfichier.js.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Si, j'ai essayé la syntaxe. Quand je mets les 2 lignes je me retrouve avec une erreur serveur, et quand je ne mets qu'1 des 2 lignes ça n'est pas pris en compte !!

  16. #16
    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
    Citation Envoyé par nicolas2603 Voir le message
    Quand je mets les 2 lignes je me retrouve avec une erreur serveur
    Tu peux nous montrer le .htaccess complet que tu as essayé et qui cause cette erreur serveur ? Il n'y a pas que 2 lignes à ajouter : ce sont 2 blocs <FilesMatch> complets à mettre.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    J'ai mis ce code. Bien entendu je pensais "bloc" quand j'ai dis "ligne".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #-------------------------------------------------------
    # Temps de mise en cache - 1 semaine sauf monfichier.js
    #-------------------------------------------------------
     
    <FilesMatch "monfichier\.js">
    Header set Cache-Control "max-age=0"
    </FilesMatch>
    <FilesMatch "(?!monfichier)\.js">
    Header set Cache-Control "max-age=604800"
    </FileMatch>
    <FilesMatch ".(gif|jpg|jpeg|png|ico|swf|pdf|xls|css)$">
    Header set Cache-Control "max-age=604800"
    </FilesMatch>

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/09/2014, 10h11
  2. mise en cache HTACCESS
    Par simoroco dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 24/07/2011, 21h19
  3. Aller contre la mise en cache du navigateur avec PHP
    Par sosophie dans le forum Langage
    Réponses: 3
    Dernier message: 12/01/2008, 12h14
  4. Mise en forme avec Netscape et Mozilla
    Par seb30 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/10/2004, 11h18
  5. Protection d'un répertoire avec .htaccess
    Par Bweb dans le forum Apache
    Réponses: 2
    Dernier message: 04/05/2004, 19h12

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