<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Commentaires sur : Expires et Cache-Control, une date limite de consommation pour vos contenus</title>
	<atom:link href="http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/feed/" rel="self" type="application/rss+xml" />
	<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/</link>
	<description>Quelques mots pour des sites web rapides</description>
	<lastBuildDate>Sat, 06 Feb 2010 16:59:18 +0100</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Par : Petit point sur les caches —Performance web</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-766</link>
		<dc:creator>Petit point sur les caches —Performance web</dc:creator>
		<pubDate>Wed, 10 Jun 2009 10:46:26 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-766</guid>
		<description>[...] Une entête Cache-Control à public, private, ou no-cache change le comportement par défaut. Un max-age ou Expires impose un cache et un must-revalidate impose une revalidation, même si ces règles contredisent le [...]</description>
		<content:encoded><![CDATA[<p>[...] Une entête Cache-Control à public, private, ou no-cache change le comportement par défaut. Un max-age ou Expires impose un cache et un must-revalidate impose une revalidation, même si ces règles contredisent le [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Éric</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-699</link>
		<dc:creator>Éric</dc:creator>
		<pubDate>Fri, 17 Apr 2009 16:40:57 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-699</guid>
		<description>Ca m&#039;a l&#039;air bon à première vue.

Tu veux bien retirer ton ifModule voir s&#039;il te sort une erreur ? éventuellement tenter un IfModule mod_expires.c

Sinon une expiration par défaut à 24 heures ça fait finalement beaucoup. Ca veut dire que si on répond à un de tes billets, on ne verra pas son propre commentaire (ni les suivants) avant 24 heures, et que toi tu ne peux pas faire de corrections quelques minutes après la publication (et si tu es comme moi tu en as besoin à chaque fois).

Plus probablement, pour un blog : 
- accueil et catégories : 10 minutes (juste histoire que ça tienne une session de navigation)
- billets récents : quelques minutes au plus, on peut se contenter de gérer les requêtes conditionnelles
- images de décoration génériques, css, javascripts : une semaine si ce n&#039;est pas versionné dans l&#039;url, quelques années sinon
- images de contenu dans les billets : entre 10 minutes et quelques heures (sachant que les requêtes conditionnelles prendront le relai au delà et qu&#039;en général il n&#039;y a pas 150 images de contenu par billet de toutes façons)
-</description>
		<content:encoded><![CDATA[<p>Ca m&#8217;a l&#8217;air bon à première vue.</p>
<p>Tu veux bien retirer ton ifModule voir s&#8217;il te sort une erreur ? éventuellement tenter un IfModule mod_expires.c</p>
<p>Sinon une expiration par défaut à 24 heures ça fait finalement beaucoup. Ca veut dire que si on répond à un de tes billets, on ne verra pas son propre commentaire (ni les suivants) avant 24 heures, et que toi tu ne peux pas faire de corrections quelques minutes après la publication (et si tu es comme moi tu en as besoin à chaque fois).</p>
<p>Plus probablement, pour un blog :<br />
- accueil et catégories : 10 minutes (juste histoire que ça tienne une session de navigation)<br />
- billets récents : quelques minutes au plus, on peut se contenter de gérer les requêtes conditionnelles<br />
- images de décoration génériques, css, javascripts : une semaine si ce n&#8217;est pas versionné dans l&#8217;url, quelques années sinon<br />
- images de contenu dans les billets : entre 10 minutes et quelques heures (sachant que les requêtes conditionnelles prendront le relai au delà et qu&#8217;en général il n&#8217;y a pas 150 images de contenu par billet de toutes façons)<br />
-</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Stéphane Deschamps</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-698</link>
		<dc:creator>Stéphane Deschamps</dc:creator>
		<pubDate>Thu, 16 Apr 2009 22:06:02 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-698</guid>
		<description>Salut Eric,

Je viens de découvrir que si je mets dans mon .htaccess les lignes suivantes, ça ne marche pas chez moi. Une idée ?


&lt;IfModule mod_expires&gt;
ExpiresActive On
ExpiresDefault &quot;access plus 24 hours&quot;
ExpiresByType text/javascript &quot;access plus 30 days&quot;
ExpiresByType text/css &quot;access plus 30 days&quot;
ExpiresByType image/* &quot;access plus 30 days&quot;


&lt;/IfModule&gt;
</description>
		<content:encoded><![CDATA[<p>Salut Eric,</p>
<p>Je viens de découvrir que si je mets dans mon .htaccess les lignes suivantes, ça ne marche pas chez moi. Une idée ?</p>
<p>&lt;IfModule mod_expires&gt;<br />
ExpiresActive On<br />
ExpiresDefault &laquo;&nbsp;access plus 24 hours&raquo;&nbsp;<br />
ExpiresByType text/javascript &laquo;&nbsp;access plus 30 days&raquo;&nbsp;<br />
ExpiresByType text/css &laquo;&nbsp;access plus 30 days&raquo;&nbsp;<br />
ExpiresByType image/* &laquo;&nbsp;access plus 30 days&raquo;&nbsp;</p>
<p>&lt;/IfModule&gt;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Pascal</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-661</link>
		<dc:creator>Pascal</dc:creator>
		<pubDate>Thu, 12 Mar 2009 19:45:30 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-661</guid>
		<description>En lisant l&#039;article que tu me donnes en lien, j&#039;ai ma réponse concernant la détermination de la proportion de visiteurs qui ont un cache vide ou pré-rempli.

Pascal</description>
		<content:encoded><![CDATA[<p>En lisant l&#8217;article que tu me donnes en lien, j&#8217;ai ma réponse concernant la détermination de la proportion de visiteurs qui ont un cache vide ou pré-rempli.</p>
<p>Pascal</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Pascal</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-660</link>
		<dc:creator>Pascal</dc:creator>
		<pubDate>Thu, 12 Mar 2009 19:10:19 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-660</guid>
		<description>Bonjour Eric,

Voici mon protocole de test:

Apache 1.3.41 (compilé à la main) + PHP 4.4.9 + eZ Publish

1/ désactivation de mod_expires

2/ vidage du cache de Firefox 3.0.7

3/ Visualisation des pages de luxpopuli.fr + d&#039;autres sites

Quand je reviens au bout d&#039;un moment sur mon site, je visualise les en-têtes avec livehttpheaders 0.14 ou Firebug (module Réseau -&gt; Tout)

Tu peux tester sur tout mon site, je remettrai mod_expires quand tu auras fini.

Comment faites-vous chez Yahoo! pour déterminer la proportion de visiteurs qui ont un cache vide ou pré-rempli ? Vous avez développé un logiciel ou bien est-ce en recoupant d&#039;autres informations (taux de rebond, nombre de page par visiteur, nombre de visites inférieures à 10s, etc...) que vous faites une estimation ?

A propos des ETags, sous Apache sous 1.3 il est impossible de les désactiver. La doc offcielle dit pour l&#039;option None que «If a document is file-based, no ETag field will be included in the response». Comme tu pourras le constater, seul mon document HTML n&#039;est pas associé à un ETag. Tout les autres éléments si. Peut-être que j&#039;interpète mal l&#039;expression «file-based» ?

Cordialement,

Pascal</description>
		<content:encoded><![CDATA[<p>Bonjour Eric,</p>
<p>Voici mon protocole de test:</p>
<p>Apache 1.3.41 (compilé à la main) + PHP 4.4.9 + eZ Publish</p>
<p>1/ désactivation de mod_expires</p>
<p>2/ vidage du cache de Firefox 3.0.7</p>
<p>3/ Visualisation des pages de luxpopuli.fr + d&#8217;autres sites</p>
<p>Quand je reviens au bout d&#8217;un moment sur mon site, je visualise les en-têtes avec livehttpheaders 0.14 ou Firebug (module Réseau -&gt; Tout)</p>
<p>Tu peux tester sur tout mon site, je remettrai mod_expires quand tu auras fini.</p>
<p>Comment faites-vous chez Yahoo! pour déterminer la proportion de visiteurs qui ont un cache vide ou pré-rempli ? Vous avez développé un logiciel ou bien est-ce en recoupant d&#8217;autres informations (taux de rebond, nombre de page par visiteur, nombre de visites inférieures à 10s, etc&#8230;) que vous faites une estimation ?</p>
<p>A propos des ETags, sous Apache sous 1.3 il est impossible de les désactiver. La doc offcielle dit pour l&#8217;option None que «If a document is file-based, no ETag field will be included in the response». Comme tu pourras le constater, seul mon document HTML n&#8217;est pas associé à un ETag. Tout les autres éléments si. Peut-être que j&#8217;interpète mal l&#8217;expression «file-based» ?</p>
<p>Cordialement,</p>
<p>Pascal</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Éric</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-659</link>
		<dc:creator>Éric</dc:creator>
		<pubDate>Wed, 11 Mar 2009 21:25:11 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-659</guid>
		<description>Bonjour,

Par défaut le navigateur devrait utiliser la revalidation. C&#039;est d&#039;autant plus vrai si la directive Cache-Control contient un &quot;must-revalidate&quot;.

Maintenant techniquement le navigateur est habilité à mettre en cache les informations comme il le souhaite. Il a un algorithme propre pour ça, ainsi que des préférences dans le navigateur. IE 6 est connu pour parfois mettre un peu trop de choses en cache.

Parfois il y aura revalidation par requête conditionnelle, souvent, mais parfois pas. Généralement ces éléments qui sont mis en cache spontanément par le navigateur ne le sont que pendant une durée courte, ou pendant la session (en fermant/rouvrant le navigateur, il y a revalidation).

Tu as un exemple d&#039;url à me proposer qu&#039;on puisse regarder sur la même base ? 

Sinon pour la date, c&#039;est mis en cache à vie ... sous réserve que l&#039;utilisateur ne vide pas son cache et que jamais ce cache ne devient plein. Une fois plein, le navigateur est obligé de retirer des éléments anciens, il choisit tout seul lesquels, les tiens peuvent en faire partie. 

Bref, en pratique tu donnes des instructions mais tu ne contrôles rien. Le client peut en tenir compte, ou pas.

En pratique entre ceux qui vident leurs cache, les proxys filtrant, ceux qui viennent pour la première fois et ceux qui ont un cache qui a été renouvelé, tu auras toujours une part non négligeable d&#039;utilisateurs qui n&#039;ont pas les éléments en cache.
Yahoo! a publié un graphique intéressant à ce sujet. Regardes la figure 3 sur http://yuiblog.com/blog/2007/01/04/performance-research-part-2/</description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Par défaut le navigateur devrait utiliser la revalidation. C&#8217;est d&#8217;autant plus vrai si la directive Cache-Control contient un &laquo;&nbsp;must-revalidate&raquo;&nbsp;.</p>
<p>Maintenant techniquement le navigateur est habilité à mettre en cache les informations comme il le souhaite. Il a un algorithme propre pour ça, ainsi que des préférences dans le navigateur. IE 6 est connu pour parfois mettre un peu trop de choses en cache.</p>
<p>Parfois il y aura revalidation par requête conditionnelle, souvent, mais parfois pas. Généralement ces éléments qui sont mis en cache spontanément par le navigateur ne le sont que pendant une durée courte, ou pendant la session (en fermant/rouvrant le navigateur, il y a revalidation).</p>
<p>Tu as un exemple d&#8217;url à me proposer qu&#8217;on puisse regarder sur la même base ? </p>
<p>Sinon pour la date, c&#8217;est mis en cache à vie &#8230; sous réserve que l&#8217;utilisateur ne vide pas son cache et que jamais ce cache ne devient plein. Une fois plein, le navigateur est obligé de retirer des éléments anciens, il choisit tout seul lesquels, les tiens peuvent en faire partie. </p>
<p>Bref, en pratique tu donnes des instructions mais tu ne contrôles rien. Le client peut en tenir compte, ou pas.</p>
<p>En pratique entre ceux qui vident leurs cache, les proxys filtrant, ceux qui viennent pour la première fois et ceux qui ont un cache qui a été renouvelé, tu auras toujours une part non négligeable d&#8217;utilisateurs qui n&#8217;ont pas les éléments en cache.<br />
Yahoo! a publié un graphique intéressant à ce sujet. Regardes la figure 3 sur <a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/" rel="nofollow">http://yuiblog.com/blog/2007/01/04/performance-research-part-2/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Pascal</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-656</link>
		<dc:creator>Pascal</dc:creator>
		<pubDate>Wed, 11 Mar 2009 15:30:51 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-656</guid>
		<description>Bonjour Eric,

Tout d&#039;abord, un grand merci pour toutes les connaissances que tu prends le temps de partager.

Voilà donc ma question:

Qu&#039;est ce que mod_expires apporte de plus que le fonctionnement par défaut du système de cache d&#039;un navigateur ?

En effet, dans le livre de Steve Souders, on peut lire page 23 (Règle3: le champ d&#039;en-tête Expires):
«Lors de sa première visite sur votre page, l&#039;utilisateur exécute via son navigateur un certain nombre de requêtes HTTP. Toutefois, l&#039;utilisation du champ d&#039;en-tête Expires offre à vos composants la possibilité d&#039;être mis en cache.»

Or j&#039;ai fait des tests en m&#039;aidant de l&#039;extension LiveHTTPHeaders (sous Firefox 3.0.7) et ce que je n&#039;ai pu que constater c&#039;est que, alors que mod_expires est désactivé, tous les éléments de mes pages sont cachés par le navigateur et réutilisés à chaque nouvelle visite.
J&#039;ai pu donc vérifier que le simple usage du système de cache du navigateur dispense ce dernier de faire d&#039;innombrables requêtes GET conditionnelles. C&#039;est sur la base de cette observation que je te pose ma question.

Cependant, ce comportement du navigateur soulève une autre question:
Puisqu&#039;aucun élément caché n&#039;est associé à une date d&#039;expiration, comment se fait-il que le navigateur n&#039;envoie pas de requêtes GET conditionnelles pour s&#039;assurer qu&#039;il n&#039;existe pas de versions plus récentes sur le serveur ?

Dernière toute petite question:
Dans ta présentation (celle de la vidéo) tu expliques que le grand avantage de mod_expires est que les éléments statiques sont cachés «à vie» (en tout cas pour une très longue période).
Faut-il comprendre qu&#039;un élément associé à une date d&#039;expiration, disons en 2020, ne sera pas retiré du cache avant cette date même pour faire de la place à d&#039;autres éléments ? Pour moi la réponse est bien sûr non, mais....

Cordialement

Pascal

Cordialement,

Pascal</description>
		<content:encoded><![CDATA[<p>Bonjour Eric,</p>
<p>Tout d&#8217;abord, un grand merci pour toutes les connaissances que tu prends le temps de partager.</p>
<p>Voilà donc ma question:</p>
<p>Qu&#8217;est ce que mod_expires apporte de plus que le fonctionnement par défaut du système de cache d&#8217;un navigateur ?</p>
<p>En effet, dans le livre de Steve Souders, on peut lire page 23 (Règle3: le champ d&#8217;en-tête Expires):<br />
«Lors de sa première visite sur votre page, l&#8217;utilisateur exécute via son navigateur un certain nombre de requêtes HTTP. Toutefois, l&#8217;utilisation du champ d&#8217;en-tête Expires offre à vos composants la possibilité d&#8217;être mis en cache.»</p>
<p>Or j&#8217;ai fait des tests en m&#8217;aidant de l&#8217;extension LiveHTTPHeaders (sous Firefox 3.0.7) et ce que je n&#8217;ai pu que constater c&#8217;est que, alors que mod_expires est désactivé, tous les éléments de mes pages sont cachés par le navigateur et réutilisés à chaque nouvelle visite.<br />
J&#8217;ai pu donc vérifier que le simple usage du système de cache du navigateur dispense ce dernier de faire d&#8217;innombrables requêtes GET conditionnelles. C&#8217;est sur la base de cette observation que je te pose ma question.</p>
<p>Cependant, ce comportement du navigateur soulève une autre question:<br />
Puisqu&#8217;aucun élément caché n&#8217;est associé à une date d&#8217;expiration, comment se fait-il que le navigateur n&#8217;envoie pas de requêtes GET conditionnelles pour s&#8217;assurer qu&#8217;il n&#8217;existe pas de versions plus récentes sur le serveur ?</p>
<p>Dernière toute petite question:<br />
Dans ta présentation (celle de la vidéo) tu expliques que le grand avantage de mod_expires est que les éléments statiques sont cachés «à vie» (en tout cas pour une très longue période).<br />
Faut-il comprendre qu&#8217;un élément associé à une date d&#8217;expiration, disons en 2020, ne sera pas retiré du cache avant cette date même pour faire de la place à d&#8217;autres éléments ? Pour moi la réponse est bien sûr non, mais&#8230;.</p>
<p>Cordialement</p>
<p>Pascal</p>
<p>Cordialement,</p>
<p>Pascal</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Hubert</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-617</link>
		<dc:creator>Hubert</dc:creator>
		<pubDate>Sat, 07 Feb 2009 11:36:59 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-617</guid>
		<description>Merci</description>
		<content:encoded><![CDATA[<p>Merci</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Éric</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-616</link>
		<dc:creator>Éric</dc:creator>
		<pubDate>Fri, 06 Feb 2009 19:41:28 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-616</guid>
		<description>Je confirme pour l&#039;utilisation des deux. Ils disent d&#039;ailleurs explicitement que Cache-Control prend le pas sur Expires. Il n&#039;y a aucun désavantage (à ma connaissance) à utiliser les deux.

Pour le protocole la plupart des clients et des serveurs utilisent la version 1.1. Certains client sont en 1.0, c&#039;est rare mais ça arrive. Il y a une auto-négociation assez simple l  le client déclare s&#039;il veut du 1.0 ou du 1.1, le serveur répond au mieux (1.1 si le client le supporte et le serveur aussi, 1.0 sinon).

Le 1.1 c&#039;est juste une mise à jour, avec des fonctionnalités en plus. C&#039;est globalement compatible avec le 1.0, mais ça a quelques impacts quand même.</description>
		<content:encoded><![CDATA[<p>Je confirme pour l&#8217;utilisation des deux. Ils disent d&#8217;ailleurs explicitement que Cache-Control prend le pas sur Expires. Il n&#8217;y a aucun désavantage (à ma connaissance) à utiliser les deux.</p>
<p>Pour le protocole la plupart des clients et des serveurs utilisent la version 1.1. Certains client sont en 1.0, c&#8217;est rare mais ça arrive. Il y a une auto-négociation assez simple l  le client déclare s&#8217;il veut du 1.0 ou du 1.1, le serveur répond au mieux (1.1 si le client le supporte et le serveur aussi, 1.0 sinon).</p>
<p>Le 1.1 c&#8217;est juste une mise à jour, avec des fonctionnalités en plus. C&#8217;est globalement compatible avec le 1.0, mais ça a quelques impacts quand même.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Hubert</title>
		<link>http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/comment-page-1/#comment-614</link>
		<dc:creator>Hubert</dc:creator>
		<pubDate>Fri, 06 Feb 2009 14:08:22 +0000</pubDate>
		<guid isPermaLink="false">http://performance.survol.fr/?p=206#comment-614</guid>
		<description>Bonjour,
j&#039;ai lu ici
http://www.sitepoint.com/article/save-cash-optimize-cache/
qu&#039;il fallait utiliser expires OU cache-control, tu dis les deux... (j&#039;ai mis les 2)
Mais au fait http 1.0 ou http 1.1 c quoi au juste? je sais un protocol; mais qui détermine l&#039;utilisation de l&#039;un ou l&#039;autre (le serveur, le navigateur, mon fournisseur d&#039;accès) et comment fait-on pour savoir quel est le protocol utilisé? Excusez la naïveté, mais j&#039;aurais besoin d&#039;éclaircissement.
Merci
(et merci surtout car grâce à ce site j&#039;obtiens B au lieu de F initialement dans Yslow, mais c du boulot! mais le client est content lol)</description>
		<content:encoded><![CDATA[<p>Bonjour,<br />
j&#8217;ai lu ici<br />
<a href="http://www.sitepoint.com/article/save-cash-optimize-cache/" rel="nofollow">http://www.sitepoint.com/article/save-cash-optimize-cache/</a><br />
qu&#8217;il fallait utiliser expires OU cache-control, tu dis les deux&#8230; (j&#8217;ai mis les 2)<br />
Mais au fait http 1.0 ou http 1.1 c quoi au juste? je sais un protocol; mais qui détermine l&#8217;utilisation de l&#8217;un ou l&#8217;autre (le serveur, le navigateur, mon fournisseur d&#8217;accès) et comment fait-on pour savoir quel est le protocol utilisé? Excusez la naïveté, mais j&#8217;aurais besoin d&#8217;éclaircissement.<br />
Merci<br />
(et merci surtout car grâce à ce site j&#8217;obtiens B au lieu de F initialement dans Yslow, mais c du boulot! mais le client est content lol)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
