]> granicus.if.org Git - apache/blob - docs/manual/caching.html.fr
xforms ad libitum
[apache] / docs / manual / caching.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Guide de la mise en cache - Serveur Apache HTTP</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
12 <script src="./style/scripts/prettify.js" type="text/javascript">
13 </script>
14
15 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
18 <p class="apache">Serveur Apache HTTP Version 2.5</p>
19 <img alt="" src="./images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
21 <div id="path">
22 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>Guide de la mise en cache</h1>
23 <div class="toplang">
24 <p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25 <a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a> |
26 <a href="./tr/caching.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
27 </div>
28
29     <p>Ce document complète la documentation de référence des modules
30     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code>,
31     <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> et du programme <a href="programs/htcacheclean.html">htcacheclean</a>.
32     Il décrit l'utilisation des fonctionnalités de mise en
33     cache du serveur HTTP Apache
34     pour accélérer les services web et proxy, tout en évitant les problèmes
35     courants et les erreurs de configuration.</p>
36   </div>
37 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introduction</a></li>
38 <li><img alt="" src="./images/down.gif" /> <a href="#http-caching">Mise en cache HTTP à trois états RFC2616</a></li>
39 <li><img alt="" src="./images/down.gif" /> <a href="#socache-caching">Mise en cache d'objets partagés à deux états de forme
40     clé/valeur</a></li>
41 <li><img alt="" src="./images/down.gif" /> <a href="#file-caching">Mise en cache à base de fichiers spécialisés</a></li>
42 <li><img alt="" src="./images/down.gif" /> <a href="#security">Considérations sur la sécurité</a></li>
43 </ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
44 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
45 <div class="section">
46 <h2><a name="introduction" id="introduction">Introduction</a></h2>
47     
48
49     <p>Le serveur HTTP Apache offre tout un ensemble de fonctionnalités
50     de mise en cache qui ont été conçues pour améliorer les performances
51     du serveur de différentes manières.</p>
52
53     <dl>
54         <dt>Mise en cache HTTP à trois états RFC2616</dt>
55         <dd><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> et son module de fournisseur
56         <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code> proposent une mise en cache
57         intelligente de niveau HTTP. Le contenu proprement dit est
58         stocké dans le cache, et mod_cache vise à respecter tous les
59         en-têtes HTTP, ainsi que les options qui contrôlent la mise en
60         cache du contenu comme décrit dans la <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html">Section
61         13 de la RFC2616</a>. <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> peut gérer des
62         configurations de mise en cache simples, mais aussi complexes
63         comme dans les cas où vous avez à faire à des contenus mandatés,
64         à des contenus locaux dynamiques, ou lorsque vous avez besoin
65         d'accélérer l'accès aux fichiers locaux situés sur disque
66         supposé lent.
67         </dd>
68
69         <dt>Mise en cache d'objets partagés de forme clé/valeur à deux
70         états</dt>
71         <dd>
72             L'<a href="socache.html">API du cache d'objets partagés</a> (socache)
73             et ses modules de fournisseurs
74             proposent une mise en cache d'objets partagés à base de
75             couples clé/valeur de niveau serveur. Ces modules sont
76             conçus pour la mise en cache de données de bas niveau comme
77             les sessions SSL et les données d'authentification. les
78             serveurs d'arrière-plan permettent le stockage des données
79             au niveau serveur en mémoire partagée, ou au niveau
80             datacenter dans un cache comme memcache ou distcache.
81         </dd>
82
83         <dt>Mise en cache de fichiers spécialisée</dt>
84         <dd>
85             <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> offre la possibilité de
86             précharger des fichiers en mémoire au démarrage du serveur,
87             et peut améliorer les temps d'accès et sauvegarder les
88             gestionnaires de fichiers pour les fichiers qui font l'objet
89             d'accès fréquents, évitant ainsi d'avoir à accéder au disque
90             à chaque requête.
91         </dd>
92     </dl>
93
94     <p>Pour tirer parti efficacement de ce document, les bases de HTTP doivent
95     vous être familières, et vous devez avoir lu les sections
96     <a href="urlmapping.html">Mise en correspondance des
97     URLs avec le système de fichiers</a> et
98     <a href="content-negotiation.html">Négociation sur le contenu</a>
99     du guide de l'utilisateur.</p>
100
101   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
102 <div class="section">
103 <h2><a name="http-caching" id="http-caching">Mise en cache HTTP à trois états RFC2616</a></h2>
104
105     
106
107     <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code></li><li><code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code></li><li><code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code></li><li><code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code></li></ul></td></tr></table>
108
109     <p>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> permet de tirer avantage du
110     mécanisme de mise en cache en ligne faisant partie
111     intégrante du protocole HTTP, et décrit dans la <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html">section
112     13 de la RFC2616</a>.</p>
113
114     <p>A la différence d'un cache simple clé/valeur à deux états où le
115     contenu est supprimé lorsqu'il est périmé, un cache HTTP comporte un
116     mécanisme permettant de conserver temporairement un contenu périmé,
117     de demander au serveur original si ce contenu périmé a été modifié,
118     et dans le cas contraire de le rendre à nouveau valide.</p>
119
120     <p>Une entrée d'un cache HTTP peut se présenter sous un de ces trois
121     états :</p>
122
123     <dl>
124     <dt>Frais</dt>
125     <dd>
126         Si un contenu est suffisamment récent (plus jeune que sa
127         <strong>durée de fraîcheur</strong>), il est considéré comme
128         <strong>frais</strong>. Un cache HTTP peut servir un contenu
129         frais sans avoir à demander quoi que ce soit au serveur
130         d'origine.
131     </dd>
132     <dt>Périmé</dt>
133     <dd>
134         <p>Si le contenu est trop ancien (plus vieux que sa
135         <strong>durée de fraîcheur</strong>), il est considéré comme
136         <strong>périmé</strong>. Un cache HTTP doit contacter le serveur
137         original pour vérifier si le contenu, même s'il est périmé, est
138         encore à jour avant de le servir au client. Soit le serveur
139         original va répondre en envoyant un contenu de remplacement si
140         le contenu périmé n'est plus à jour, soit dans le cas idéal il
141         renverra un code pour signaler au cache que le contenu est
142         encore à jour, et qu'il est inutile de le générer ou de
143         l'envoyer à nouveau. Le contenu repasse à l'état "frais" et le
144         cycle continue.</p>
145
146         <p>Le protocole HTTP permet au cache de servir des données
147         périmées dans certaines circonstances, comme lorsqu'une
148         tentative de rafraîchir une entrée depuis un serveur original
149         se solde par un échec avec un code d'erreur 5xx, ou lorsqu'une
150         autre requête est déjà en train d'essayer de rafraîchir la même
151         entrée. Dans ces cas, un en-tête <code>Warning</code> est ajouté
152         à la réponse.</p>
153     </dd>
154     <dt>Non Existent</dt>
155     <dd>
156         Si le cache est plein, il se réserve la possibilité de supprimer
157         des entrées pour faire de la place. Une entrée peut être
158         supprimée à tout moment, qu'elle soit fraîche ou périmée.
159         L'outil <a href="programs/htcacheclean.html">htcacheclean</a>
160         peut être utilisé à la demande, ou lancé en tant que démon afin
161         de conserver la taille du cache ou le nombre d'inodes en deçà de
162         valeurs spécifiées. Cet outil essaie cependant de
163         supprimer les entrées périmées avant les entrées fraîches.
164     </dd>
165     </dl>
166
167     <p>Le fonctionnement détaillé d'un cache HTTP est décrit dans la <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html">Section
168     13 de la RFC2616</a>.</p>
169
170     <h3>Interaction avec le serveur</h3>
171       
172
173       <p>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> interagit avec le serveur
174       à deux niveaux possibles en fonction de la directive <code class="directive"><a href="./mod/mod_cache.html#cachequickhandler">CacheQuickHandler</a></code> :
175       </p>
176
177       <dl>
178         <dt>Phase du gestionnaire rapide</dt>
179         <dd>
180           <p>Cette phase se déroule très tôt au cours du traitement de
181           la requête, juste après l'interprétation de cette dernière. Si
182           le contenu se trouve dans le cache, il est servi immédiatement
183           et pratiquement tout le reste du traitement de la requête est
184           court-circuité.</p>
185
186               <p>Dans ce scénario, le cache se comporte comme s'il avait
187               été "boulonné" à l'entrée du serveur.</p>
188               
189               <p>Ce mode possède les meilleures performances car la
190               majorité des traitements au niveau du serveur sont
191               court-circuités. Cependant, il court-circuite aussi les
192               phases d'authentification et d'autorisation du traitement
193               au niveau du serveur, et il doit donc être utilisé avec
194               prudence lorsque que ces phases sont importantes.</p>
195           </dd>
196           <dt>Phase du gestionnaire normal</dt>
197           <dd>
198               <p>Cette phase se déroule très tard au cours du traitement
199               de la requête, en fait après toutes les phases de ce
200               traitement.</p>
201
202               <p>Dans ce scénario, le cache se comporte comme s'il avait
203               été "boulonné" à la sortie du serveur.</p>
204
205               <p>Ce mode offre la plus grande souplesse, car il permet
206               de faire intervenir la mise en cache en un point
207               précisément spécifié de la chaîne de filtrage, et le
208               contenu issu du cache peut être filtré ou personnalisé
209               avant d'être servi au client.</p>
210           </dd>
211         </dl>
212
213         <p>Si l'URL ne se trouve pas dans le cache,
214         <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ajoutera un <a href="filter.html">filtre</a> à la chaîne de filtrage afin
215         d'enregistrer la réponse dans le cache, puis passera la main
216         pour permettre le déroulement normal de la suite du traitement
217         de la requête. Si la mise en cache du contenu est autorisée, il
218         sera enregistré dans le cache pour pouvoir être servi à nouveau
219         ; dans le cas contraire, le contenu sera ignoré.</p>
220
221         <p>Si le contenu trouvé dans le cache est périmé, le module
222         <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> convertit la requête en
223         <strong>requête conditionnelle</strong>. Si le serveur original
224         renvoie une réponse normale, elle est enregistrée dans le cache
225         en lieu et place du contenu périmé. Si le serveur original
226         renvoie une réponse "304 Not Modified", le contenu repasse à
227         l'état "frais" et est servi par le filtre au lieu d'être
228         sauvegardé.</p>
229     
230
231     <h3>Amélioration du taux de présence dans le cache</h3>
232       
233
234       <p>Lorsqu'un serveur virtuel est connu sous la forme d'un des
235       nombreux alias du serveur, la définition de la directive
236       <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> à
237       <code>On</code> peut augmenter de manière significative le nombre
238       de correspondances positives dans le cache. Ceci est du au fait
239       que la clé du cache contient le nom d'hôte du serveur virtuel.     
240       Avec <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> positionnée
241       à <code>On</code>,
242       les hôtes virtuels possédant plusieurs noms de serveur ou alias ne
243       généreront pas d'entités de cache différentes, et le contenu sera mis en
244       cache en faisant référence au nom d'hôte canonique.</p>
245
246     
247
248     <h3>Durée de fraîcheur</h3>
249       
250
251        <p>Un contenu bien formé destiné à être mis en cache doit déclarer
252        explicitement une durée de fraîcheur via les champs
253        <code>max-age</code> ou <code>s-maxage</code> de l'en-tête
254        <code>Cache-Control</code>, ou en incluant un en-tête
255        <code>Expires</code>.</p>
256       
257       <p>De plus, un client peut passer outre la durée de fraîcheur
258       définie pour le serveur original en ajoutant son propre en-tête
259       <code>Cache-Control</code> à la requête. Dans ce cas, c'est la
260       durée de fraîcheur la plus basse entre la requête et la réponse
261       qui l'emporte.</p>
262
263       <p>Lorsque cette durée de fraîcheur est absente de la requête ou
264       de la réponse, une durée de fraîcheur par défaut s'applique. La
265       durée de fraîcheur par défaut des entrées du cache est d'une heure
266       ; elle peut cependant être facilement modifiée à l'aide de
267       la directive <code class="directive"><a href="./mod/mod_cache.html#cachedefaultexpire">CacheDefaultExpire</a></code>.</p>
268
269       <p>Si une réponse ne contient pas d'en-tête <code>Expires</code> mais
270       inclut un en-tête <code>Last-Modified</code>, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
271       peut déduire une durée de fraîcheur en se basant sur une
272       heuristique, qui peut être contrôlée via la directive <code class="directive"><a href="./mod/mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></code>.</p>
273
274       <p>Pour les contenus locaux, ou les contenus distants qui ne
275       spécifient pas leur propre en-tête <code>Expires</code>,
276       <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code> permet de régler finement la durée de
277       fraîcheur via les paramètres <code>max-age</code> et
278       <code>Expires</code>.</p>
279
280       <p>On peut aussi contrôler la durée de fraîcheur maximale en utilisant
281       la directive <code class="directive"><a href="./mod/mod_cache.html#cachemaxexpire">CacheMaxExpire</a></code>.</p>
282
283     
284
285     <h3>Guide succinct des requêtes conditionnelles</h3>
286       
287
288      <p>Lorsqu'un contenu du cache est périmé, httpd modifie la requête
289      pour en faire une requête conditionnelle</p>
290
291       <p>Lorsque la réponse originale du cache contient un en-tête
292       <code>ETag</code>, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ajoute un en-tête
293       <code>If-None-Match</code> à la requête envoyée au serveur
294       d'origine. Lorsque la réponse originale du cache contient un en-tête
295       <code>Last-Modified</code>, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ajoute un en-tête
296       <code>If-Modified-Since</code> à la requête envoyée au serveur
297       d'origine. Dans ces deux cas, la requête devient une requête
298       <strong>conditionnelle</strong>.</p>
299
300       <p>Lorsqu'un serveur d'origine reçoit une requête conditionnelle,
301       il vérifie si le paramètre Etag ou Last-Modified a été modifié en
302       fonction des paramètres de la requête. Si ce n'est pas le cas, il
303       répondra avec le message lapidaire "304 Not Modified". Ceci
304       informe le cache que le contenu est périmé mais encore à jour, et
305       peut être utilisé tel quel pour les prochaines requêtes jusqu'à ce
306       qu'il atteigne à nouveau sa date de péremption.</p>
307
308       <p>Si le contenu a été modifié, il est servi comme s'il s'agissait
309       d'une requête normale et non conditionnelle.</p>
310
311       <p>Les requêtes conditionnelles offrent deux avantages. D'une
312       part, il est facile de déterminer si le contenu du serveur
313       d'origine correspond à celui situé
314       dans le cache, et ainsi d'économiser la consommation de ressources
315       nécessaire au transfert du contenu dans son ensemble.</p>
316
317       <p>D'autre part, un serveur d'origine bien conçu sera configuré de
318       telle manière que les requêtes conditionnelles nécessitent pour
319       leur production bien moins de ressources qu'une réponse complète.
320       Dans le cas des fichiers statiques, il suffit en général d'un
321       appel système de type <code>stat()</code> ou similaire pour
322       déterminer si la taille ou la date de modification du fichier a
323       été modifiée. Ainsi, même un contenu local pourra être servi plus
324       rapidement depuis le cache s'il n'a pas été modifié.</p>
325       
326       <p>Il serait souhaitable que tous les serveurs d'origine
327       supportent les requêtes conditionnelles, car dans le cas
328       contraire, ils répondent comme s'il s'agissait d'une requête
329       normale, et le cache répond comme si le contenu avait été
330       modifié et enregistre ce dernier. Le cache se comporte alors
331       comme un simple cache à deux état, où le contenu est servi s'il
332       est à jour, ou supprimé dans le cas contraire.</p>
333     
334
335     <h3>Que peut-on mettre en cache ?</h3>
336       
337
338       <p>La liste complète des conditions nécessaires pour qu'une
339       réponse puisse être enregistrée dans un cache HTTP est fournie
340       dans la <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.4">section
341       13.4 Response Cacheability de la RFC2616</a>, et peut se résumer
342       ainsi :</p>
343
344       <ol>
345         <li>La mise en cache doit être activée pour cette URL. Voir les
346         directives <code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code> et <code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code>.</li>
347
348         <li>La reponse doit avoir un code de statut HTTP de 200, 203, 300, 301
349         ou 410.</li>
350
351         <li>La requête doit être de type HTTP GET.</li>
352
353         <li>Si la réponse contient un en-tête "Authorization:", elle doit aussi
354         contenir une option "s-maxage", "must-revalidate" ou "public"
355         dans l'en-tête "Cache-Control:".</li>
356
357         <li>Si l'URL contient une chaîne de requête
358         (provenant par exemple d'une méthode GET de formulaire HTML), elle ne
359         sera pas mise en cache, à moins que la réponse ne
360         spécifie explicitement un délai d'expiration via un
361         en-tête "Expires:" ou une directive max-age ou s-maxage de
362         l'en-tête "Cache-Control:" comme indiqué dans les
363         sections 13.2.1. et 13.9 de la RFC2616.</li>
364
365         <li>Si la réponse a un statut de 200 (OK), elle doit aussi contenir
366         au moins un des en-têtes "Etag", "Last-Modified" ou
367         "Expires", ou une directive max-age ou s-maxage de
368         l'en-tête "Cache-Control:", à moins que la directive
369         <code class="directive"><a href="./mod/mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></code>
370         ne précise d'autres contraintes.</li>
371
372         <li>Si la réponse contient l'option "private" dans un en-tête
373         "Cache-Control:", elle ne sera pas mise en cache à moins que la
374         directive
375         <code class="directive"><a href="./mod/mod_cache.html#cachestoreprivate">CacheStorePrivate</a></code>
376         ne précise d'autres contraintes.</li>
377
378         <li>De même, si la réponse contient l'option "no-store" dans un en-tête
379         "Cache-Control:", elle ne sera pas mise en cache à moins que la
380         directive
381         <code class="directive"><a href="./mod/mod_cache.html#cachestorenostore">CacheStoreNoStore</a></code>
382         n'ait été utilisée.</li>
383
384         <li>Une réponse ne sera pas mise en cache si elle comporte un en-tête
385         "Vary:" contenant le caractère "*" qui correspond à toute
386         chaîne de caractères.</li>
387       </ol>
388     
389
390     <h3>Qu'est ce qui ne doit pas être mis en cache ?</h3>
391       
392
393       <p>Le client qui crée la requête ou le serveur d'origine qui
394       génère la réponse doit être à même de déterminer si le contenu
395       doit pouvoir être mis en cache ou non en définissant correctement
396       l'en-tête <code>Cache-Control</code>, et
397       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> sera alors en mesure de satisfaire les
398       souhaits du client ou du serveur de manière appropriée.
399       </p>
400
401       <p>Les contenus qui varient au cours du temps, ou en fonction de
402       particularités de la requête non prises en compte par la
403       négociation HTTP ne doivent pas être mis en cache. Ce type de
404       contenu doit se déclarer lui-même "à ne pas mettre en cache" via
405       l'en-tête <code>Cache-Control</code>.</p>
406       
407       <p>Si le contenu change souvent, suite par exemple à une durée de
408       fraîcheur de l'ordre de la minute ou de la seconde, il peut tout
409       de même être mis en cache, mais il est alors fortement souhaitable
410       que le serveur d'origine supporte correctement les
411       <strong>requêtes conditionnelles</strong> afin que des réponses
412       complètes ne soient pas systématiquement générées.</p>
413
414       <p>Un contenu qui varie en fonction d'en-têtes de requête fournis
415       par le client peut être mis en cache, sous réserve d'une
416       utilisation appropriée de l'en-tête de réponse <code>Vary</code>.</p>
417     
418
419     <h3>Contenu variable et/ou négocié</h3>
420       
421
422       <p>Lorsque le serveur d'origine est configuré pour servir des
423       contenus différents en fonction de la valeur de certains en-têtes
424       de la requête, par exemple pour servir une ressource en plusieurs
425       langages à partir d'une seule URL, le mécanisme de mise en cache
426       d'HTTP permet de mettre en cache plusieurs variantes de la même
427       page à partir d'une seule URL.</p>
428       
429       <p>Pour y parvenir, le serveur d'origine ajoute un en-tête
430       <code>Vary</code> pour indiquer quels en-têtes doivent être pris
431       en compte par un cache pour déterminer si deux variantes sont
432       différentes l'une de l'autre.</p>
433
434       <p>Si par exemple, une réponse est reçue avec l'en-tête Vary suivant,</p>
435
436       <div class="example"><p><code>
437 Vary: negotiate,accept-language,accept-charset
438       </code></p></div>
439
440       <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne servira aux demandeurs que le contenu
441       mis en cache qui correspond au contenu des en-têtes accept-language et
442       accept-charset de la requête originale.</p>
443
444       <p>Plusieurs variantes d'un contenu peuvent être mises en cache
445       simultanément ; <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> utilise l'en-tête
446       <code>Vary</code> et les valeurs correspondantes des en-têtes de
447       la requête spécifiés dans ce dernier pour
448       déterminer quelle variante doit être servie au client.</p>
449           
450     
451
452     <h3><a name="disk" id="disk">Mise en cache sur disque</a></h3>
453       
454
455       <p>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> s'appuie sur des
456       implémentations de stockage en arrière-plan spécifiques pour gérer
457       le cache ; à ce titre, <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code> fournit le
458       support de la mise en cache sur disque.</p>
459
460       <p>En général, le module se configure comme suit :</p>
461
462       <pre class="prettyprint lang-config">
463 CacheRoot   "/var/cache/apache/"
464 CacheEnable disk /
465 CacheDirLevels 2
466 CacheDirLength 1
467     </pre>
468
469
470     <p>Il est important de savoir que, les fichiers mis en cache étant stockés
471     localement, la mise en cache par l'intermédiaire du système d'exploitation
472     sera en général aussi appliquée à leurs accès. Si bien que même si les
473     fichiers sont stockés sur disque, s'il font l'objet d'accès fréquents,
474     il est probable que le système d'exploitation s'appliquera à ce qu'ils
475     soient servis à partir de la mémoire.</p>
476
477     
478
479     <h3>Comprendre le stockage dans le cache</h3>
480       
481
482       <p>Pour stocker des entités dans le cache,
483       le module <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code> crée une empreinte (hash) de 22
484       caractères de l'URL qui a fait l'objet d'une requête. Cette empreinte
485       comprend le nom d'hôte, le protocole, le port, le chemin et tout argument
486       de type CGI associé à l'URL, ainsi que les éléments
487       spécifiés dans l'en-tête Vary afin d'être sur que plusieurs URLs
488       n'interfèrent pas entre elles.</p>
489
490       <p>Chaque position de l'empreinte peut contenir un caractère
491       choisi parmi 64 caractères différents, il y a donc
492       64^22 possibilités pour une empreinte. Par exemple, une URL peut posséder
493       l'empreinte <code>xyTGxSMO2b68mBCykqkp1w</code>. Cette empreinte est
494       utilisée pour préfixer les noms de fichiers spécifiques à cette URL à
495       l'intérieur du cache; cependant, elle est tout d'abord placée dans les
496       répertoires du cache selon les directives
497       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code> et
498       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>.</p>
499
500       <p>La directive
501       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code>
502       définit le nombre de niveaux de sous-répertoires, et
503       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>
504       le nombre de caractères composant le nom des sous-répertoires. Dans
505       l'exemple donné plus haut, l'empreinte se trouvera à :
506       <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code>.</p>
507
508       <p>Cette technique a pour but principal de réduire le nombre de
509       sous-répertoires ou de fichiers contenus dans un répertoire particulier,
510       car le fonctionnement de la plupart des systèmes de fichiers est ralenti
511       quand ce nombre augmente. Avec la valeur "1" pour la directive
512       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>,
513       il peut y avoir au plus 64 sous-répertoires à un niveau quelconque.
514       Avec la valeur "2", il peut y en avoir 64 * 64, etc...
515       A moins d'avoir une bonne raison pour ne pas le faire, l'utilisation de
516       la valeur "1" pour la directive
517       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlength">CacheDirLength</a></code>
518       est recommandée.</p>
519
520       <p>Le paramétrage de la directive
521       <code class="directive"><a href="./mod/mod_cache_disk.html#cachedirlevels">CacheDirLevels</a></code>
522       dépend du nombre de fichiers que vous pensez stocker dans le cache.
523       Avec une valeur de "2" comme dans l'exemple donné plus haut,
524       4096 sous-répertoires peuvent être créés au total. Avec 1 million de
525       fichiers dans le cache, cela équivaut à environ 245 URLs mises en cache
526       dans chaque répertoire.</p>
527
528       <p>Chaque URL nécessite au moins deux fichiers dans le cache. Ce sont en
529       général un fichier ".header", qui contient des meta-informations à propos
530       de l'URL, comme la date de son arrivée à expiration,
531       et un fichier ".data" qui est la copie exacte du contenu à servir.</p>
532
533       <p>Dans le cas d'un contenu négocié via l'en-tête "Vary", un répertoire
534       ".vary" sera créé pour l'URL en question. Ce répertoire contiendra de
535       multiples fichiers ".data" correspondant aux différents contenus
536       négociés.</p>
537     
538
539     <h3>Maintenance du cache sur disque</h3>
540       
541
542       <p>Le module <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code> n'effectue aucune
543       régulation de l'espace disque utilisé par le cache, mais s'il
544       s'arrête en douceur en cas d'erreur disque et se comporte alors
545       comme si le cache n'avait jamais existé.</p>
546
547       <p>Par contre l'utilitaire
548       <a href="programs/htcacheclean.html">htcacheclean</a> fourni avec
549       httpd
550       vous permet de nettoyer le cache périodiquement.
551       Déterminer la fréquence à laquelle lancer <a href="programs/htcacheclean.html">htcacheclean</a> et la taille souhaitée
552       pour le cache est une tâche relativement complexe et il vous faudra de
553       nombreux essais et erreurs pour arriver à sélectionner des valeurs
554       optimales.</p>
555
556       <p><a href="programs/htcacheclean.html">htcacheclean</a> opère selon deux
557       modes. Il peut s'exécuter comme démon résident, ou être lancé
558       périodiquement par cron. <a href="programs/htcacheclean.html">htcacheclean</a> peut mettre une heure
559       ou plus pour traiter de très grands caches (plusieurs dizaines de
560       Gigaoctets) et si vous l'exécutez à partir de cron, il vous est
561       conseillé de déterminer la durée typique d'un traitement, afin d'éviter
562       d'exécuter plusieurs instances à la fois.</p>
563
564       <p>Il est aussi conseillé d'attribuer un niveau de priorité "nice"
565       approprié à htcacheclean de façon à ce qu'il n'effectue pas trop
566       d'accès disque pendant le fonctionnement du serveur.</p>
567
568       <p class="figure">
569       <img src="images/caching_fig1.gif" alt="" width="600" height="406" /><br />
570       <a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Croissance
571       typique du cache / séquence de nettoyage.</p>
572
573       <p>Comme <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code> ne tient pas compte de l'espace
574       utilisé dans le cache, vous devez vous assurer que
575       <a href="programs/htcacheclean.html">htcacheclean</a> est configuré de
576       façon à laisser suffisamment d'"espace de croissance"
577       à la suite d'un nettoyage.</p>
578     
579
580   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
581 <div class="section">
582 <h2><a name="socache-caching" id="socache-caching">Mise en cache d'objets partagés à deux états de forme
583     clé/valeur</a></h2>
584
585     
586
587     <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authn_socache.html">mod_authn_socache</a></code></li><li><code class="module"><a href="./mod/mod_socache_dbm.html">mod_socache_dbm</a></code></li><li><code class="module"><a href="./mod/mod_socache_dc.html">mod_socache_dc</a></code></li><li><code class="module"><a href="./mod/mod_socache_memcache.html">mod_socache_memcache</a></code></li><li><code class="module"><a href="./mod/mod_socache_shmcb.html">mod_socache_shmcb</a></code></li><li><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></code></li><li><code class="directive"><a href="./mod/mod_ssl.html#sslsessioncache">SSLSessionCache</a></code></li><li><code class="directive"><a href="./mod/mod_ssl.html#sslstaplingcache">SSLStaplingCache</a></code></li></ul></td></tr></table>
588     
589     <p>Le serveur HTTP Apache fournit un cache d'objets partagés de bas
590     niveau pour la mise en cache d'informations comme les sessions SSL
591     ou les données d'authentification dans l'interface <a href="socache.html">socache</a>.</p>
592
593     <p>Pour chaque implémentation un module supplémentaire est fourni
594     qui offre les services d'arrière-plan suivants :</p>
595
596     <dl>
597     <dt><code class="module"><a href="./mod/mod_socache_dbm.html">mod_socache_dbm</a></code></dt>
598     <dd>Cache d'objets partagés basé sur DBM.</dd>
599     <dt><code class="module"><a href="./mod/mod_socache_dc.html">mod_socache_dc</a></code></dt>
600     <dd>Cache d'objets partagés basé sur Distcache.</dd>
601     <dt><code class="module"><a href="./mod/mod_socache_memcache.html">mod_socache_memcache</a></code></dt>
602     <dd>Cache d'objets partagés basé sur Memcache.</dd>
603     <dt><code class="module"><a href="./mod/mod_socache_shmcb.html">mod_socache_shmcb</a></code></dt>
604     <dd>Cache d'objets partagés basé sur la mémoire partagée.</dd>
605     </dl>
606
607     <h3><a name="mod_authn_socache-caching" id="mod_authn_socache-caching">Mise en cache des données d'authentification</a></h3>
608       
609
610       <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authn_socache.html">mod_authn_socache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authn_socache.html#authncachesocache">AuthnCacheSOCache</a></code></li></ul></td></tr></table>
611
612       <p>Le module <code class="module"><a href="./mod/mod_authn_socache.html">mod_authn_socache</a></code> permet la mise en
613       cache des données issues d'une authentification, diminuant ainsi
614       la charge des serveurs d'authentification en arrière-plan.</p>
615
616     
617
618     <h3><a name="mod_ssl-caching" id="mod_ssl-caching">Mise en cache des sessions SSL</a></h3>
619       
620
621       <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_ssl.html#sslsessioncache">SSLSessionCache</a></code></li><li><code class="directive"><a href="./mod/mod_ssl.html#sslstaplingcache">SSLStaplingCache</a></code></li></ul></td></tr></table>
622
623       <p>Le module <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code> utilise l'interface
624       <code>socache</code> pour fournir un cache de session et un cache
625       de base.</p>
626
627     
628
629   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
630 <div class="section">
631 <h2><a name="file-caching" id="file-caching">Mise en cache à base de fichiers spécialisés</a></h2>
632
633     
634
635     <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code></li><li><code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code></li></ul></td></tr></table>
636
637     <p>Sur les plateformes où le système de fichiers peut être lent, ou
638     lorsque les descripteurs de fichiers sont gourmands en ressources,
639     il est possible de précharger des fichiers en mémoire au démarrage
640     du serveur.</p>
641
642     <p>Sur les systèmes où l'ouverture des fichiers est lente, il est
643     possible d'ouvrir le fichier au démarrage du serveur et de mettre en
644     cache le descripteur de fichier. Ces options peuvent vous aider sur
645     les systèmes où l'accès aux fichiers statiques est lent.</p>
646
647     <h3><a name="filehandle" id="filehandle">Mise en cache des descripteurs de fichier</a></h3>
648       
649
650       <p>Le processus d'ouverture d'un fichier peut être en soi une
651       source de ralentissement, en particulier sur les systèmes de
652       fichiers sur le réseau. httpd permet d'éviter ce ralentissement en
653       maintenant un cache des descripteurs de fichiers ouverts pour les
654       fichiers souvent servis. Actuellement, httpd fournit une seule
655       implémentation de mise en cache des descripteurs de fichiers.</p>
656
657       <h4>CacheFile</h4>
658         
659
660         <p>La forme la plus basique de mise en cache que propose httpd
661         est la mise en cache des descripteurs de fichiers fournie par le
662         module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>. Plutôt que de mettre en
663         cache le contenu des fichiers, ce cache maintient une table des
664         descripteurs de fichiers ouverts. Les fichiers devant faire
665         l'objet d'une mise en cache de ce type sont spécifiés dans le
666         fichier de configuration via la directive <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>.</p>
667
668         <p>La directive <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> informe httpd
669         qu'il doit ouvrir le fichier lors de son démarrage et qu'il doit
670         réutiliser le descripteur de fichier mis en cache pour tous les
671         accès futurs à ce fichier.</p>
672
673         <pre class="prettyprint lang-config">
674         CacheFile /usr/local/apache2/htdocs/index.html
675         </pre>
676
677
678         <p>Si vous désirez mettre en cache un grand nombre de fichiers
679         de cette manière, vous devez vous assurer que le nombre maximal
680         de fichiers ouverts pour votre système d'exploitation est défini
681         à une valeur suffisante.</p>
682
683         <p>Bien que l'utilisation de la directive <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> n'entraîne pas de
684         mise en cache du contenu du fichier proprement dit, elle
685         implique que si le fichier est modifié pendant l'exécution du
686         serveur, ces modifications ne seront pas prises en compte. Le
687         fichier sera toujours servi dans l'état où il se trouvait au
688         moment du démarrage du serveur.</p>
689
690         <p>Si le fichier est supprimé pendant l'exécution du serveur, ce
691         dernier conservera le descripteur de fichier ouvert associé et
692         servira le fichier dans l'état où il se trouvait au
693         moment du démarrage du serveur. Cela signifie aussi que même si
694         le fichier a été supprimé, et n'apparaît donc plus dans le
695         système de fichiers, l'espace disque libéré ne sera disponible
696         qu'une fois le serveur httpd arrêté et donc le descripteur de
697         fichier fermé.</p>
698       
699
700     
701
702     <h3><a name="inmemory" id="inmemory">In-Memory Caching</a></h3>
703       
704
705     <p>Servir un contenu directement depuis la mémoire système est
706     universellement reconnu comme la méthode la plus rapide. Lire des fichiers
707     depuis un contrôleur de disque ou pire, depuis un réseau distant est plus
708     lent de plusieurs ordres de grandeur. Les contrôleurs de disque réalisent
709     en général des opérations mécaniques, et l'accès au réseau est limité par la
710     bande passante dont vous disposez. Par contre, les temps d'accès à la
711     mémoire sont de l'ordre de la nano-seconde.</p>
712
713     <p>Cependant la mémoire système n'est pas bon marché; à capacité égale,
714     c'est de loin le type de stockage le plus coûteux et il est important de
715     s'assurer qu'elle est utilisée efficacement. Le fait de mettre en cache
716     des fichiers en mémoire diminue d'autant la quantité de mémoire système
717     disponible. Comme nous le verrons plus loin, ce n'est pas un problème en
718     soi dans le cas de la mise en cache par l'intermédiaire du système
719     d'exploitation, mais si l'on utilise la mise en cache en mémoire propre à
720     httpd, il faut prendre garde à ne pas allouer trop de mémoire au cache.
721     Sinon le système sera contraint d'utiliser le swap, ce qui dégradera
722     sensiblement les performances.</p>
723
724       <h4>Mise en cache par l'intermédiaire du système d'exploitation</h4>
725       
726
727       <p>Dans la plupart des systèmes d'exploitation modernes, c'est le noyau
728       qui gère directement la mise en cache en mémoire des données relatives
729       aux fichiers. C'est une fonctionnalité puissante, et les systèmes
730       d'exploitation s'en acquittent fort bien pour la plus grande partie.
731       Considérons par exemple, dans le cas de Linux, la différence entre le
732       temps nécessaire à la première lecture d'un fichier et le temps
733       nécessaire à sa deuxième lecture;</p>
734
735         <div class="example"><pre>
736 colm@coroebus:~$ time cat testfile &gt; /dev/null
737 real    0m0.065s
738 user    0m0.000s
739 sys     0m0.001s
740 colm@coroebus:~$ time cat testfile &gt; /dev/null
741 real    0m0.003s
742 user    0m0.003s
743 sys     0m0.000s</pre></div>
744
745       <p>Même pour ce petit fichier, il y a une grande différence entre les
746       temps nécessaires pour lire le fichier. Ceci est du au fait que le
747       noyau a mis en cache le contenu du fichier en mémoire.</p>
748
749       <p>Du fait de toujours pouvoir disposer de mémoire système, vous pouvez
750       être assuré qu'il y aura de plus en plus de contenus de fichiers stockés
751       dans ce cache. Ceci peut s'avérer une méthode de mise en cache en mémoire
752       très efficace, et ne nécessite aucune configuration supplémentaire
753       de httpd.</p>
754
755       <p>De plus, comme le système d'exploitation sait si des fichiers
756       ont été
757       supprimés ou modifiés, il peut effacer automatiquement des contenus de
758       fichiers du cache lorsque cela s'avère nécessaire. Ceci constitue un gros
759       avantage par rapport à la mise en cache en mémoire
760       de httpd qui n'a
761       aucune possibilité de savoir si un fichier a été modifié.</p>
762       
763
764     <p>En dépit des performances et des avantages de la mise en cache
765     automatique par le système d'exploitation, la mise en cache en mémoire
766     peut être effectuée plus efficacement par httpd dans certaines
767     circonstances.</p>
768
769     <h4>Mise en cache à l'aide de la directive MMapFile</h4>
770       
771
772       <p>La directive <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code>
773       fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> vous permet de
774       demander à httpd de charger un contenu de fichier statique en mémoire
775       lors de son démarrage (à l'aide de l'appel
776       système mmap). httpd
777       utilisera le contenu chargé en mémoire pour satisfaire ultérieurement
778       toutes les demandes d'accès à ce fichier.</p>
779
780         <pre class="prettyprint lang-config">
781         MMapFile /usr/local/apache2/htdocs/index.html
782         </pre>
783
784
785       <p>Comme dans le cas de la directive
786       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>, toute
787       modification du fichier ne sera plus prise en compte par httpd une fois
788       ce dernier démarré.</p>
789
790       <p> La directive
791       <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code> ne gardant
792       pas la trace de la quantité de mémoire qu'elle alloue, vous devez prendre
793       garde de ne pas en abuser. Chaque processus enfant de httpd utilisant
794       sa propre réplique de la mémoire allouée, il est donc d'une importance
795       critique de s'assurer que les fichiers chargés ne sont pas d'une taille
796       trop importante afin d'épargner au système l'utilisation du swap.</p>
797       
798     
799
800   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
801 <div class="section">
802 <h2><a name="security" id="security">Considérations sur la sécurité</a></h2>
803     
804
805     <h3>Autorisation et contrôle d'accès</h3>
806       
807
808       <p>Utiliser <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> revient sensiblement à la même
809       chose qu'avoir un mandataire inverse intégré (reverse-proxy). Les requêtes
810       seront servies par le module de mise en cache sauf si ce dernier
811       détermine qu'un processus d'arrière-plan doit être appelé. La mise en
812       cache de ressources locales modifie considérablement le modèle de
813       sécurité de httpd.</p>
814
815       <p>Comme le parcours de la hiérarchie d'un système de fichiers pour
816       examiner le contenu d'éventuels fichiers
817       <code>.htaccess</code> serait une opération très coûteuse en ressources,
818       annulant partiellement de ce fait l'intérêt de la mise en cache
819       (accélérer le traitement des requêtes),
820       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne se préoccupe pas de savoir s'il a
821       l'autorisation de servir une entité mise en cache. En d'autres termes,
822       si <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> a mis en cache un certain contenu, ce
823       dernier sera servi à partir du cache tant qu'il ne sera pas arrivé à
824       expiration.</p>
825
826       <p>Si par exemple, votre configuration autorise l'accès à une ressource
827       en fonction de l'adresse IP, vous devez vous assurer que ce contenu n'est
828       pas mis en cache. Ceci est possible en utilisant la directive
829       <code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code>, ou le module
830       <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>. Livré à lui-même,
831       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> - pratiquement comme un mandataire inverse -
832       mettrait en cache le contenu lors de son service, et le servirait ensuite
833       à tout client, vers n'importe quelle adresse IP.</p>
834
835       <p>Lorsque la directive <code class="directive"><a href="./mod/mod_cache.html#cachequickhandler">CacheQuickHandler</a></code> est définie à
836       <code>Off</code>, toutes les phases du traitement de la requête
837       sont exécutées et le modèle de sécurité reste le même.</p>
838
839     
840
841     <h3>Piratages locaux</h3>
842       
843
844       <p>Etant donné que les requêtes des utilisateurs finaux peuvent être
845       servies depuis le cache, ce dernier est une cible potentielle pour ceux
846       qui veulent défigurer un contenu ou interférer avec lui. Il est important
847       de garder à l'esprit que l'utilisateur sous lequel tourne
848       httpd doit
849       toujours avoir l'accès en écriture dans le cache. Ceci est en contraste
850       total avec la recommandation usuelle d'interdire à l'utilisateur sous
851       lequel tourne Apache
852       l'accès en écriture à tout contenu.</p>
853
854       <p>Si l'utilisateur sous lequel tourne Apache est compromis,
855       par exemple à cause d'une
856       faille de sécurité dans un processus CGI, il est possible que le cache
857       fasse l'objet d'une attaque. Il est relativement aisé d'insérer ou de
858       modifier une entité dans le cache en utilisant le module
859       <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code>.</p>
860
861       <p>Cela représente un risque relativement élévé par rapport aux autres
862       types d'attaques qu'il est possible de mener sous l'utilisateur apache.
863       Si vous utilisez <code class="module"><a href="./mod/mod_cache_disk.html">mod_cache_disk</a></code>, vous devez garder ceci
864       à l'esprit : effectuez toujours les mises à jour de
865       httpdquand des
866       correctifs de sécurité sont annoncés et exécutez les processus CGI sous
867       un utilisateur autre qu'apache en utilisant
868       <a href="suexec.html">suEXEC</a> dans la mesure du possible.</p>
869
870     
871
872     <h3>Empoisonnement du cache (Cache Poisoning)</h3>
873       
874
875       <p>Si vous utilisez httpd comme serveur mandataire avec mise en cache,
876       vous vous exposez aussi à un éventuel "Empoisonnement du
877       cache" (Cache poisoning). L'empoisonnement du cache est un terme général
878       pour désigner les attaques au cours desquelles l'attaquant fait en sorte
879       que le serveur mandataire renvoie à un contenu incorrect (et souvent
880       indésirable) suite à en provenance du serveur d'arrière-plan.
881       </p>
882
883       <p>Par exemple, si les serveur DNS qu'utilise votre système où tourne
884       httpd sont vulnérables à l'empoisonnement du cache des DNS, un attaquant
885       pourra contrôler vers où httpd se connecte lorsqu'il demande un contenu
886       depuis le serveur d'origine.
887       Un autre exemple est constitué par les attaques ainsi nommées
888       "Dissimulation de requêtes HTTP" (HTTP request-smuggling).</p>
889
890       <p>Ce document n'est pas le bon endroit pour une discussion approfondie
891       à propos de la Dissimulation de requêtes HTTP (utilisez plutôt votre
892       moteur de recherche favori); il est cependant important de savoir qu'il
893       est possible d'élaborer une série de requêtes, et d'exploiter une
894       vulnérabilité d'un serveur web d'origine de telle façon que l'attaquant
895       puisse contrôler entièrement le contenu renvoyé par le mandataire.</p>
896     
897
898     <h3>Déni de Service / Cachebusting</h3>
899       
900
901       <p>Le mécanisme utilisé via l'en-tête Vary permet de mettre en
902       cache simultanément plusieurs variantes d'une ressource avec la
903       même URL. Le cache sélectionne la variante correcte à envoyer au
904       client en fonction des valeurs d'en-tête fournies par ce dernier.
905       Ce mécanisme peut devenir un problème lorsqu'on tente d'appliquer
906       le mécanisme des variantes à un en-tête connu pour pouvoir
907       posséder un grand nombre de valeurs
908       possibles en utilisation normal, comme par exemple l'en-tête
909       <code>User-Agent</code>. En fonction de la popularité du site web,
910       des milliers ou même des millions d'entrées de cache dupliquées
911       peuvent être créées pour la même URL, submergeant les autres
912       entrées du cache.</p>
913       
914       <p>Dans d'autres cas, il peut être nécessaire de modifier l'URL
915       d'une ressource particulière à chaque requête, en général en lui
916       ajoutant une chaîne "cachebuster". Si ce contenu est déclaré comme
917       pouvant être mis en cache par un serveur avec une durée de
918       fraîcheur significative, ces entrées peuvent submerger les entrées
919       légitimes du cache. Alors que <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> fournit
920       une directive <code class="directive"><a href="./mod/mod_cache.html#cacheignoreurlsessionidentifiers">CacheIgnoreURLSessionIdentifiers</a></code>,
921       cette dernière doit être utilisée avec prudence pour s'assurer que
922       les caches du navigateur ou du mandataire le plus proche
923       (downstream proxy) ne sont pas victimes du même problème de Déni de
924       service.</p>
925     
926   </div></div>
927 <div class="bottomlang">
928 <p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
929 <a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a> |
930 <a href="./tr/caching.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
931 </div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
932 <script type="text/javascript"><!--//--><![CDATA[//><!--
933 var comments_shortname = 'httpd';
934 var comments_identifier = 'http://httpd.apache.org/docs/trunk/caching.html';
935 (function(w, d) {
936     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
937         d.write('<div id="comments_thread"><\/div>');
938         var s = d.createElement('script');
939         s.type = 'text/javascript';
940         s.async = true;
941         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
942         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
943     }
944     else {
945         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
946     }
947 })(window, document);
948 //--><!]]></script></div><div id="footer">
949 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
950 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
951 if (typeof(prettyPrint) !== 'undefined') {
952     prettyPrint();
953 }
954 //--><!]]></script>
955 </body></html>