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