28220 sujets

CSS et mise en forme, CSS3

Pages :
Bonjour,
J'aimerais savoir ce qui se passe si je change les styles de mon site. Si les feuilles de style restent en mémoire du navigateur de l'utilisateur pendant disons 20 jours, et que celui-ci vient visiter le site tous les 15 jours, il ne rechargera jamais la feuille de style et ne verra jamis mais modifications, non? Comment alors faire pour qu'il voit mes modifications dès que je change ma feuille de style?
Faut-il nécéssairement changer le nom de la feuille de style?
A mmon avis il me semble que le cache est vidé lorsqu'on quitte le navigateur, enfin ça dépend des paramètres
A priori sur mon navigateur, il recharge les feuilles de styles à chaque fois que je relance mon navigateur. Cela veux t-il dire que la mémoire cache du navigateur est vidée à chaque fois qu'on ferme le navigateur ? Est-ce vrai sur tout les navigateurs ?
Autre question que je me pose : le navigateur vérifi t-il uniquement le nom de la feuille de style pour savoir si i a besoin de la recharger, ou vérifit-il d'autre paramètres, comme la taille de la feuille de style, la date de modification ?
En fait, dans quelles circonstances il garde en cache et dans quelles circonstances il recharge ?
Modifié par mathmax (14 Oct 2005 - 13:04)
Ok merci mais c'est un peu hard comme tu dis : à chaque fois qu'on retourne sur la page il faut la recharger...
En fait, après plusieurs essais sur Mozilla, je me suis rendu compte que parfois il rechargait la page CSS quand on relance la navigateur, parfois non. Je n'ai pas réussi à comprendre ce qui déclanche la recharge des styles. Cependant, si on fait F5, les styles sont rechargés. Mais on ne peux pas forcer l'utilisateur à appuyer sur F5...
J'ai par contre un problème plus compliqué : J'ai, dans ma page CSS, une image en background. Dans la feuille de style je ne change pas le nom de l'image. Je trouve ça pratique car si je veux changer l'image, je n'ai plus qu'à la remplacer par une nouvelle en conservant le même nom. Ca marche bien sur Opera et internet Explorer, mais sur Mozilla, même si il recharge la feuille de style, il garde l'image en cache et celle-ci ne change pas.
Voilà tout cela pour dire que je ne comprends pas dans quels circonstances les styles, les images, le HTML sont mise en cache.

J'ai l'impression (bien que ça semble dépendre du navigateur) que ce qui est le moins mis en cache st le HTML, ensuite les styles, puis les images, et enfin les image en background dans les feuilles de styles. Je me trompe?
Salut

Personnellement je te conseillerai d'avoir un nom d'image différent par image, cela t'évitera des fausses manips (et crois moi je sais de quoi je parle).

Et je pense que si tu change le nom, donc ton style css, tu auras plus de chances que cela soit raffraichi au chargement/rechargement de page.
Pour forcer le raffraichissement avec F5 je pense que tu peux pas l'imposer mais tu peux faire un petit message discret qq part qui encouragera à le faire.
mathmax a écrit :
J'ai l'impression (bien que ça semble dépendre du navigateur) que ce qui est le moins mis en cache st le HTML, ensuite les styles, puis les images, et enfin les image en background dans les feuilles de styles. Je me trompe?
Oui.
La classification que tu tentes de bâtir n'a pas de réalité.

Les différents éléments que tu listes (image, feuille de style, fichier html...) sont des objets. Tous les types d'objets sont traités, malgré les apparences, selon des règles génériques similaires. Chaque objet à une date de création et une durée de vie ou une date de péremption. Par ailleurs il existe différentes règles de gestion dont les dates mentionnées peuvent être des paramètres.

Les dates et la(es) règle(s) de gestion à appliquer peuvent être transmises par le serveur dans l'entête http. Si ces informations sont effectivement transmises elles surchargent les règles locales de gestion des systèmes de cache (cache serveur, proxy, cache navigateurs...) Sinon les règles locales sont appliquées (il faut être attentif au fait que certains internautes peuvent subir dans ce cas l'effet de cache proxy (AOL par ex)). Les règles locales de cache des navigateurs sont le fruit de différents paramétrages que les internautes ignorent royalement le plus souvent, et qui diffèrent d'un navigateur à l'autre. De tout façon ces règles locales ne sont pas maîtrisées par le webmaster.

Ton choix de ne pas renommer tes objets est parfait, mais tu dois envoyer des entêtes http adaptées à ta situation. Voici un chapitre de la norme http qui te sera utile (voir notamment à partir de 14.9). Voici un exemple de bug cache sous IE que l'on peut traiter par la maîtrise des entêtes http.
Salut, las question que je me pose c'est est-ce que la balise meta Pragma (comme suggéré plus haut) est efficace pour ces problèmes de cache ?

Ou est-ce que ces balises :
meta name="revisit-after" content="5 days"
meta http-equiv="expires" content="0"
peuvent aussi être efficaces ?

Et du coup quelles sont les solutions adoptées pardes "scripts" de forum tels phpBB qui sont censés pouvoir prendre en compte les modifications du fond et de la forme ?
Les balises méta peuvent être prise en compte par le navigateur. Elles ne le sont pas par tous les navigateurs. En cas d'incohérence entre une balise méta et l'entête http, c'est bien l'entête http qui prime.

Je conseille vivement de positionner correctement l'entête http. Les balises méta c'est plutôt pour faire joli ou pour se donner bonne conscience AMHA.
Merci pour vos réponses.
Une chôse que je ne comprends pas cependant : Pourquoi les navigateurs ne chargent-ils pas une feuille de style seulement si la date de dernière modification de la feuille est postérieur à la date de dernière visite de la page web ? 9a sinplifierait les chôses non?
Modifié par mathmax (14 Oct 2005 - 18:47)
mathmax a écrit :
Une chôse que je ne comprends pas cependant : Pourquoi les navigateurs ne chargent-ils pas une feuille de style seulement si la date de dernière modification de la feuille est postérieur à la date de dernière visite de la page web ? 9a sinplifierait les chôses non?
Heum, c'est assez simple.
1/ le navigateur ne connait la date de dernière modification de quelque chose que lorsqu'il a reçu le quelque chose (le navigateur n'est pas le serveur Smiley cligne )
2/ le navigateur ne connait pas la date de dernière visite d'une page web, car il ne stocke dans son cache que des objets et pas des "pages web". De plus ce qui intéresse surtout un cache c'est la date de dernière modification de l'objet (date qui datait de la précédente visite Smiley ravi ) et sa durée de vie.
Xavier,
merci pour ton aide, mais j'ai un peu de mal à comprendre ton lien en anglais. Pour tout te dire, je ne vois pas trop ce qu'est l'entête http, où ça se trouve,... J'ai cherché sur google et je suis tombé sur une page ou ils expliquent comment gérer la mise en cache des objets avec l'entête HTTP Référentiel 1.0:Serveur : en-tête HTTP pour la mise en cache
édit par Igor: merci de ne pas coller de liens à rallonge qui déforment le forum
mais j'ai beaucoup de mal à me représenter concrètement ce que ça donne (comment on l'écrit, où on l'écrit,...).
Il y a aussi un outil permettant de vérifier la possible mise en cache et j'avoue ne pas top comprendre à quoi cela sert.
Pourrais-tu m'éclairer ?
Modifié par Igor (15 Oct 2005 - 01:43)
a écrit :
je ne vois pas trop ce qu'est l'entête http, où ça se trouve
Internet est un réseau informatique (infrastructure matérielle reliant des ordinateurs) par lequel des ordinateurs échangent des données. Ces échanges se font selon des conventions très précises. Ces conventions sont structurées en ce qu'on appelle des protocoles. De très nombreux protocoles sont utilisés sur internet, chacun ayant une finalité propre. Des protocoles peuvent être encastrés les uns dans les autres. Dans ce cas, ceux qui sont près de l'infrastructure matérielle sont appelés protocoles de bas niveau ceux qui en sont éloignés sont dits de haut niveau. Exemple simplificateur : j'ai un protocole qui décrit comment envoyer un octet (bas niveau) qui est utilisé par un protocole qui décrit comment envoyer un fichier (haut niveau). Sur Internet, 2 protocoles bien connus (au moins de nom) plutôt bas sont IP et TCP. Par ailleurs je suis certains que tu connais de nom des protocoles de haut niveau : http, ftp, smtp, IRQ, protocoles P2P, VPN ...

http correspond à ce qu'on appel le web (qui est donc bien différent de Internet). Ce protocole définit comment un serveur web envoie à un navigateur des objets constituant une page web, et comment un navigateur les demande. Ce protocole spécifie une enveloppe (ce que j'ai appelé entête http) et comment y glisser un contenu. Tu peux prendre l'image de la poste : sur l'enveloppe tu écris l'adresse du destinataire, la tienne éventuellement, tu mets un timbre etc, ce sont les entêtes, à l'intérieur tu glisses le contenu et tu fermes.

Quand tu surfes sur le web les entêtes http ne t'intéressent guère. C'est le contenu que tu vois après réarrangement de la part du navigateur. Mais le serveur web et le navigateur ne se causent que par messages http en spécifiant correctement l'enveloppe http.
a écrit :
j'ai beaucoup de mal à me représenter concrètement ce que ça donne
Si tu utilises Firefox je te conseille l'extension livehttpheaders. Tu découvriras l'ensemble des données que le serveur et le navigateur s'écrivent, tu verras si ton navigateur demande telle feuille de style ou telle image. Tu verras également quelles sont les réponses du serveur.
a écrit :
comment on l'écrit, où on l'écrit,...
Coté navigateur inutile de s'en soucier (sauf si tu es un hacker), il se débrouille tout seul. En revanche si tu es webmaster, logiquement c'est toi qui devrait piloter ton serveur web (même s'il fait souvent bien son boulot tout seul).
Pour des pages statiques il faut paramétrer le serveur web directement. Apache dispose d'un module mod_expires qui permet de gérer les entêtes http spécifiques aux problématiques cache. Pour les pages dynamiques, la plateforme doit permettre de gérer également les entêtes. Sous PHP par exemple la fonction header() le fait très bien.
merci Xavier pour ces expliquations
Donc si j'ai bien compris, il faut que je modifie l'entête http sur mon serveur. Mais où exactement ?
Et qu'est ce qu'il faut que j'écrive dedans ?
Aurais-tu un exemple d'entête http ?
a écrit :
il faut que je modifie l'entête http sur mon serveur
Pour être précis, c'est ton serveur qui écrit une entête http à chaque fois qu'il envoie un objet sur Internet. Cette entête est différente à chaque fois. Mais c'est toi qui fournit des informations à ton serveur pour que les entêtes correspondent à ce que tu veux.
a écrit :
Aurais-tu un exemple d'entête http ?
Avec Firefox tu peux en avoir une idée : outils/information sur la page/en-têtes. Pour avoir les entêtes complètes installe livehttpheaders.

La gestion du serveur relativement à ces entêtes dépend du contexte. Sur Apache, pour des pages statiques tu dois modifier httpd.conf ou .htaccess. Regarde la doc Apache concernant le module mod_expires. Si tu utilises PHP regarde la doc de la fonction header().

Le lien que j'ai déjà mis plus haut donne en bas de la page un exemple de paramétrage du module expires d'Apache.
Apache c'est un serveur ?
Moi je voyais le serveur comme un emplacement où je peux mettre mes html, css, image,... Quand tu parles de changer les configurations du serveur (en-tête), c'est changer les configurations de mon emplacement sur le serveur ? Il doit donc y avoir une en-tête qui est reservé à chaque emplacement sur le serveur, non ?
Je n'ai par aillleurs pas trouvé les fichiers que tu m'as cité sur mon serveur.
Modifié par mathmax (15 Oct 2005 - 00:51)
a écrit :
Apache c'est un serveur ?
Oui. Apache est un logiciel que l'on appelle serveur web (web server en anglais). Ce logiciel s'exécute sur une machine que l'on appelle également un serveur. Il ne faut cependant pas confondre, l'un est une brique matérielle, l'autre une brique logicielle.

Mes explications n'ont toujours concerné que la brique logicielle.
a écrit :
Quand tu parles de changer les configurations du serveur (en-tête), c'est changer les configurations de mon emplacement sur le serveur
Non
a écrit :
Il doit donc y avoir une en-tête qui est reservé à chaque emplacement sur le serveur, non ?
Non
a écrit :
Je n'ai par aillleurs pas trouvé les fichiers que tu m'as cité sur mon serveur.
Il existe de nombreux logiciels faisant office de serveur web. Apache est le plus utilisé. IIS en est un autre édité par Microsoft, et il en existe bien d'autres encore.
Soit tu n'as pas Apache mais un autre serveur, soit tu as mal cherché, soit tu n'utilises aucun serveur (consultation locale d'une page). Dans le dernier cas tu ne reproduis absolument pas le contexte dans lequel se situe un site web et ta vision est complètement faussée.
Mais c'est mon Hoster qui a accès au serveur logiciel. Je ne peux pas modifier son en-tête moi. Je n'ai qu'un emplaçement où je peux mettre des fichiers, non ?
Si je ne me trompe pas, la modification du httpd n'est possible que sur serveur dédié.
et pour les mod et le .htaccess, il faut vérifier les paramètres avec un phpinfo.
Pages :