]> granicus.if.org Git - apache/blob - docs/manual/caching.html.fr
update transformation
[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.3</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.3</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_disk_cache.html">mod_disk_cache</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 cache d'Apache
30     pour accélérer les services web et proxy, tout en évitant les problèmes
31     courants et les erreurs de configuration.</p>
32   </div>
33 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introduction</a></li>
34 <li><img alt="" src="./images/down.gif" /> <a href="#overview">Vue d'ensemble de la mise en cache</a></li>
35 <li><img alt="" src="./images/down.gif" /> <a href="#security">Considérations sur la sécurité</a></li>
36 <li><img alt="" src="./images/down.gif" /> <a href="#filehandle">Mise en cache de la gestion de fichier</a></li>
37 <li><img alt="" src="./images/down.gif" /> <a href="#inmemory">Mise en cache en mémoire</a></li>
38 <li><img alt="" src="./images/down.gif" /> <a href="#disk">Mise en cache sur disque</a></li>
39 </ul></div>
40 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
41 <div class="section">
42 <h2><a name="introduction" id="introduction">Introduction</a></h2>
43     
44
45     <p>Depuis la version 2.2 du serveur HTTP Apache, les modules
46     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
47     et <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> ne sont plus jugés expérimentaux
48     et on considère qu'ils peuvent être utilisés en production. Ces
49     architectures de mise en cache constituent un puissant concept
50     d'accélération de la gestion HTTP, tant comme serveur web originel
51     que comme mandataire.</p>
52
53     <p>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> et son module de soutien
54     <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>
55     permettent une mise en cache intelligente du point de vue HTTP.
56     Le contenu proprement dit est stocké dans le cache,
57     et mod_cache tente d'honorer tous les en-têtes HTTP et les options
58     qui définissent la possibilité de mise en cache du contenu. Il gère non
59     seulement le contenu local, mais aussi le contenu mandaté.
60     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
61     est conçu pour des configurations de mise en cache simples ou complexes,
62     dans lesquels vous traitez de contenu mandaté, de contenu local dynamique
63     ou avez besoin d'accélérer l'accès à des fichiers locaux qui sont modifiés
64     au cours du temps.</p>
65
66     <p>Le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> quant à lui, constitue une
67     forme de mise en cache plus basique, mais quelques fois intéressante.
68     Plutôt que de gérer la complexité de s'assurer de manière active de la
69     possibilité de mise en cache d'URLs,
70     <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> fournit des méthodes pour la gestion
71     et l'édition de fichiers en mémoire afin de maintenir un cache de fichiers
72     dans l'état où ils étaient la dernière fois qu'Apache a démarré.
73     En tant que tel, <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> a été conçu pour améliorer
74     le temps d'accès à des fichiers locaux statiques qui ne sont modifiés
75     que rarement.</p>
76
77     <p>Etant donné que <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> constitue une
78     implémentation de mise en cache relativement simple, mises à part les
79     sections spécifiques sur les directives <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> et <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code>, les explications fournies
80     dans ce guide concernent l'architecture de mise en cache du
81     module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>.</p>
82
83     <p>Pour tirer parti efficacement de ce document, les bases de HTTP doivent
84     vous être familières, et vous devez avoir lu les sections
85     <a href="urlmapping.html">Mise en correspondance des
86     URLs avec le système de fichiers</a> et
87     <a href="content-negotiation.html">Négociation sur le contenu</a>
88     du guide de l'utilisateur.</p>
89
90   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
91 <div class="section">
92 <h2><a name="overview" id="overview">Vue d'ensemble de la mise en cache</a></h2>
93
94     
95
96     <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_disk_cache.html">mod_disk_cache</a></code></li><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_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/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><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>
97
98     <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> peut faire intervenir deux phases
99     principales pendant la durée de vie d'une requête.
100     En premier lieu, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
101     est un module de mise en correspondance d'URLs, ce qui signifie que si
102     une URL a été mise en cache, et que la version du cache de cette URL n'est
103     pas arrivée à expiration, la requête sera traitée directement par
104     <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>.</p>
105
106     <p>Ceci entraîne que toutes autres actions qui se dérouleraient normalement
107     au cours du processus de traitement d'une requête -- par exemple un
108     traitement effectué par <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, ou
109     <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> --
110     ne seront pas effectuées.  Mais c'est justement l'intérêt
111     de la mise en cache préalable du contenu.</p>
112
113     <p>Si l'URL ne se trouve pas dans le cache, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
114     va ajouter un <a href="filter.html">filtre</a> au traitement de la requête.
115     Une fois le contenu localisé par Apache selon la conception courante, le
116     filtre sera exécuté en même temps que le contenu sera servi.
117     S'il est déterminé que le contenu peut être mis en cache,
118     il sera sauvegardé dans le cache pour une utilisation future.</p>
119
120     <p>Si l'URL se trouve dans le cache, mais est arrivée à expiration,
121     le filtre est quand-même ajouté, mais <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va créer
122     une requête conditionnelle en arrière-plan, pour déterminer si la version
123     du cache est encore à jour. Si la version du cache est encore à jour, ses
124     meta-informations seront mises à jour et la requête sera servie à partir du
125     cache. Si la version du contenu n'est plus à jour, elle sera supprimée et le
126     filtre va sauvegarder le contenu mis à jour dans le cache
127     au moment où il sera servi.</p>
128
129     <h3>Amélioration du taux de présence dans le cache</h3>
130       
131
132       <p>Lors de la mise en cache de contenu généré localement, le
133       positionnement de la directive
134       <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> à
135       <code>On</code> peut améliorer de manière spectaculaire le taux de
136       présence dans le cache. Ceci est du au fait que le nom d'hôte de l'hôte
137       virtuel qui sert le contenu constitue une partie de la clé de cache.
138       Avec <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> positionnée
139       à <code>On</code>,
140       les hôtes virtuels possédant plusieurs noms de serveur ou alias ne
141       généreront pas d'entités de cache différentes, et le contenu sera mis en
142       cache en faisant référence au nom d'hôte canonique.</p>
143
144       <p>Les documents mis en cache ne seront servis qu'en réponse à des
145       requêtes de type URL, car la mise en cache est effectuée lors de la phase
146       de traduction de l'URL en nom de fichier.
147       En général, cela n'a que peu d'effet, à moins que vous n'utilisiez les
148       <a href="howto/ssi.html">Inclusions Côté Serveur (SSI)</a>;</p>
149
150       <div class="example"><pre>
151 &lt;!-- L'inclusion suivante peut être mise en cache --&gt;
152 &lt;!--#include virtual="/footer.html" --&gt;
153
154 &lt;!-- L'inclusion suivante ne peut pas être mise en cache --&gt;
155 &lt;!--#include file="/path/to/footer.html" --&gt;</pre></div>
156
157       <p>Si vous utilisez les SSI, et voulez bénéficier de la vitesse de
158       service depuis le cache, vous devez utiliser des inclusions de type
159       <code>virtual</code>.</p>
160     
161
162     <h3>Périodes d'expiration</h3>
163       
164
165       <p>La période d'expiration par défaut pour les entités du cache est
166       d'une heure; elle peut cependant être facilement modifiée à l'aide de
167       la directive <code class="directive"><a href="./mod/mod_cache.html#cachedefaultexpire">CacheDefaultExpire</a></code>. Cette valeur par
168       défaut n'est utilisée que lorsque la source originale du contenu ne
169       précise pas de période d'expiration ou d'heure de dernière
170       modification.</p>
171
172       <p>Si une réponse ne contient pas d'en-tête <code>Expires</code> mais
173       inclut un en-tête <code>Last-Modified</code>, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
174       peut déduire une période d'expiration en se basant sur la valeur de la
175       directive <code class="directive"><a href="./mod/mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></code>.</p>
176
177       <p>La période d'expiration des contenus locaux peut être ajustée finement
178       en utilisant le module <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>.</p>
179
180       <p>On peut aussi contrôler la période d'expiration maximale en utilisant
181       la directive <code class="directive"><a href="./mod/mod_cache.html#cachemaxexpire">CacheMaxExpire</a></code>.</p>
182
183     
184
185     <h3>Guide succinct des requêtes conditionnelles</h3>
186       
187
188       <p>Lorsqu'un contenu est arrivé à expiration dans le cache et fait
189       l'objet d'une nouvelle demande d'accès, plutôt que traiter directement
190       la requête originale, Apache préfère utiliser une
191       requête conditionnelle.</p>
192
193       <p>HTTP propose toute une panoplie d'en-têtes qui permettent à un client,
194       ou au cache de distinguer les différentes versions d'un même contenu. Par
195       exemple, si une ressource a été servie avec un en-tête "Etag:", il est
196       possible de créer une requête conditionnelle contenant un en-tête
197       "If-None-Match:". Si une ressource a été servie avec un en-tête
198       "Last-Modified:", il est possible de créer une requête conditionnelle
199       contenant un en-tête "If-Modified-Since:", etc....</p>
200
201       <p>Lorsqu'une telle requête conditionnelle est créée, la reponse diffère
202       selon que le contenu satisfait ou non aux conditions. Si une requête est
203       créée avec un en-tête "If-Modified-Since:", et le contenu n'a pas été
204       modifié depuis le moment indiqué dans la requête, alors un laconique
205       "304 Not Modified" est retourné.</p>
206
207       <p>Si le contenu a été modifié, il est servi comme si la requête n'avait
208       pas été conditionnelle à l'origine.</p>
209
210       <p>Les bénéfices des requêtes conditionnelles pour ce qui concerne la
211       mise en cache sont de deux sortes. Premièrement, quand une telle requête
212       est envoyée au processus en arrière-plan, il sera aisé de déterminer
213       si le contenu que devra servir le processus en arrière-plan correspond
214       au contenu stocké dans le cache, sans être obligé de transmettre la
215       totalité de la ressource.</p>
216
217       <p>Deuxièmement, les requêtes conditionnelles sont en général moins
218       coûteuses en ressources pour le processus en arrière-plan.
219       Pour ce qui est des fichiers
220       statiques, l'action type est un appel à <code>stat()</code> ou un appel
221       système similaire, pour déterminer si la taille du fichier ou sa date de
222       modification ont changé. Ainsi, même si Apache met en cache le contenu
223       local, un contenu arrivé à expiration pourra être servi plus rapidement
224       depuis le cache s'il n'a pas été modifié, parce que la lecture depuis le
225       cache est plus rapide que la lecture depuis le processus en arrière-plan
226       (à comparer à la différence de vitesse entre la lecture depuis un cache en
227       mémoire avec <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> et la lecture depuis un disque).</p>
228     
229
230     <h3>Que peut-on mettre en cache ?</h3>
231       
232
233       <p>Comme mentionné plus haut, les deux styles de mise en cache d'Apache
234       fonctionnent différemment; la mise en cache de
235       <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> conserve les contenus des fichiers
236       tels qu'ils étaient au démarrage d'Apache. Quand une requête pour un
237       fichier mis en cache par ce module est envoyée, elle est interceptée
238       et le fichier mis en cache est servi.</p>
239
240       <p>La mise en cache de <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, quant à elle, est
241       plus complexe. Lors du traitement d'une requête, le module de mise en
242       cache déterminera si le contenu peut être mis en cache, s'il ne l'a
243       pas déjà été auparavant. Les conditions qui permettent de déterminer
244       la possibilité de mise en cache d'une réponse sont :</p>
245
246       <ol>
247         <li>La mise en cache doit être activée pour cette URL. Voir les
248         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>
249
250         <li>La reponse doit avoir un code de statut HTTP de 200, 203, 300, 301
251         ou 410.</li>
252
253         <li>La requête doit être de type HTTP GET.</li>
254
255         <li>Si la requête contient un en-tête "Authorization:", la réponse ne
256         sera pas mise en cache.</li>
257
258         <li>Si la réponse contient un en-tête "Authorization:", elle doit aussi
259         contenir une option "s-maxage", "must-revalidate" ou "public"
260         dans l'en-tête "Cache-Control:".</li>
261
262         <li>Si l'URL contient une chaîne de requête
263         (provenant par exemple d'une méthode GET de formulaire HTML), elle ne
264         sera pas mise en cache, à moins que la réponse ne
265         spécifie explicitement un délai d'expiration via un
266         en-tête "Expires:" ou une directive max-age ou s-maxage de
267         l'en-tête "Cache-Control:" comme indiqué dans les
268         sections 13.2.1. et 13.9 de la RFC2616.</li>
269
270         <li>Si la réponse a un statut de 200 (OK), elle doit aussi contenir
271         au moins un des en-têtes "Etag", "Last-Modified" ou
272         "Expires", ou une directive max-age ou s-maxage de
273         l'en-tête "Cache-Control:", à moins que la directive
274         <code class="directive"><a href="./mod/mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></code>
275         ne précise d'autres contraintes.</li>
276
277         <li>Si la réponse contient l'option "private" dans un en-tête
278         "Cache-Control:", elle ne sera pas mise en cache à moins que la
279         directive
280         <code class="directive"><a href="./mod/mod_cache.html#cachestoreprivate">CacheStorePrivate</a></code>
281         ne précise d'autres contraintes.</li>
282
283         <li>De même, si la réponse contient l'option "no-store" dans un en-tête
284         "Cache-Control:", elle ne sera pas mise en cache à moins que la
285         directive
286         <code class="directive"><a href="./mod/mod_cache.html#cachestorenostore">CacheStoreNoStore</a></code>
287         n'ait été utilisée.</li>
288
289         <li>Une réponse ne sera pas mise en cache si elle comporte un en-tête
290         "Vary:" contenant le caractère "*" qui correspond à toute
291         chaîne de caractères.</li>
292       </ol>
293     
294
295     <h3>Qu'est ce qui ne doit pas être mis en cache ?</h3>
296       
297
298       <p>En bref, tout contenu qui varie beaucoup avec le temps, ou en fonction
299       de particularités de la requête qui ne sont pas couvertes par la
300       négociation HTTP, ne doit pas être mis en cache.</p>
301
302       <p>Un contenu dynamique qui varie en fonction de l'adresse IP du
303       demandeur, ou est modifié toutes les 5 minutes, ne devra en général
304       pas être mis en cache.</p>
305
306       <p>Si par contre le contenu servi diffère en fonction de la valeur de
307       divers en-têtes HTTP, il se peut que l'on puisse le mettre en cache
308       intelligemment en utilisant un en-tête "Vary".</p>
309     
310
311     <h3>Contenu variable et/ou négocié</h3>
312       
313
314       <p>Si <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> reçoit une réponse contenant un en-tête
315       "Vary", lorsqu'un contenu a été demandé par un processus d'arrière-plan,
316       il va s'efforcer de la traiter intelligemment. Si possible,
317       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va détecter les en-têtes attribués dans la
318       réponse "Vary" à l'occasion des futures demandes, et servir une réponse
319       correcte à partir du cache.</p>
320
321       <p>Si par exemple, une réponse est reçue avec l'en-tête Vary suivant,</p>
322
323       <div class="example"><p><code>
324 Vary: negotiate,accept-language,accept-charset
325       </code></p></div>
326
327       <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne servira aux demandeurs que le contenu
328       mis en cache qui correspond au contenu des en-têtes accept-language et
329       accept-charset de la requête originale.</p>
330     
331
332   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
333 <div class="section">
334 <h2><a name="security" id="security">Considérations sur la sécurité</a></h2>
335     
336
337     <h3>Autorisation et contrôle d'accès</h3>
338       
339
340       <p>Utiliser <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> revient sensiblement à la même
341       chose qu'avoir un mandataire inverse intégré (reverse-proxy). Les requêtes
342       seront servies par le module de mise en cache sauf si ce dernier
343       détermine qu'un processus d'arrière-plan doit être appelé. La mise en
344       cache de ressources locales modifie considérablement le modèle de
345       sécurité d'Apache.</p>
346
347       <p>Comme le parcours de la hiérarchie d'un système de fichiers pour
348       examiner le contenu d'éventuels fichiers
349       <code>.htaccess</code> serait une opération très coûteuse en ressources,
350       annulant partiellement de ce fait l'intérêt de la mise en cache
351       (accélérer le traitement des requêtes),
352       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne se préoccupe pas de savoir s'il a
353       l'autorisation de servir une entité mise en cache. En d'autres termes,
354       si <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> a mis en cache un certain contenu, ce
355       dernier sera servi à partir du cache tant qu'il ne sera pas arrivé à
356       expiration.</p>
357
358       <p>Si par exemple, votre configuration autorise l'accès à une ressource
359       en fonction de l'adresse IP, vous devez vous assurer que ce contenu n'est
360       pas mis en cache. Ceci est possible en utilisant la directive
361       <code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code>, ou le module
362       <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>. Livré à lui-même,
363       <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> - pratiquement comme un mandataire inverse -
364       mettrait en cache le contenu lors de son service, et le servirait ensuite
365       à tout client, vers n'importe quelle adresse IP.</p>
366     
367
368     <h3>Piratages locaux</h3>
369       
370
371       <p>Etant donné que les requêtes des utilisateurs finaux peuvent être
372       servies depuis le cache, ce dernier est une cible potentielle pour ceux
373       qui veulent défigurer un contenu ou interférer avec lui. Il est important
374       de garder à l'esprit que l'utilisateur sous lequel tourne Apache doit
375       toujours avoir l'accès en écriture dans le cache. Ceci est en contraste
376       total avec la recommandation usuelle d'interdire à l'utilisateur sous
377       lequel tourne Apache
378       l'accès en écriture à tout contenu.</p>
379
380       <p>Si l'utilisateur sous lequel tourne Apache est compromis,
381       par exemple à cause d'une
382       faille de sécurité dans un processus CGI, il est possible que le cache
383       fasse l'objet d'une attaque. Il est relativement aisé d'insérer ou de
384       modifier une entité dans le cache en utilisant le module
385       <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>.</p>
386
387       <p>Cela représente un risque relativement élévé par rapport aux autres
388       types d'attaques qu'il est possible de mener sous l'utilisateur apache.
389       Si vous utilisez <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>, vous devez garder ceci
390       à l'esprit : effectuez toujours les mises à jour d'Apache quand des
391       correctifs de sécurité sont annoncés et exécutez les processus CGI sous
392       un utilisateur autre qu'apache en utilisant
393       <a href="suexec.html">suEXEC</a> dans la mesure du possible.</p>
394
395     
396
397     <h3>Empoisonnement du cache (Cache Poisoning)</h3>
398       
399
400       <p>Si vous utilisez Apache comme serveur mandataire avec mise en cache,
401       vous vous exposez aussi à un éventuel "Empoisonnement du
402       cache" (Cache poisoning). L'empoisonnement du cache est un terme général
403       pour désigner les attaques au cours desquelles l'attaquant fait en sorte
404       que le serveur mandataire renvoie à un contenu incorrect (et souvent
405       indésirable) suite à en provenance du serveur d'arrière-plan.
406       </p>
407
408       <p>Par exemple, si les serveur DNS qu'utilise votre système où tourne
409       Apache sont vulnérables à l'empoisonnement du cache des DNS, un attaquant
410       pourra contrôler vers où Apache se connecte lorsqu'il demande un contenu
411       depuis le serveur d'origine.
412       Un autre exemple est constitué par les attaques ainsi nommées
413       "Dissimulation de requêtes HTTP" (HTTP request-smuggling).</p>
414
415       <p>Ce document n'est pas le bon endroit pour une discussion approfondie
416       à propos de la Dissimulation de requêtes HTTP (utilisez plutôt votre
417       moteur de recherche favori); il est cependant important de savoir qu'il
418       est possible d'élaborer une série de requêtes, et d'exploiter une
419       vulnérabilité d'un serveur web d'origine de telle façon que l'attaquant
420       puisse contrôler entièrement le contenu renvoyé par le mandataire.</p>
421     
422   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
423 <div class="section">
424 <h2><a name="filehandle" id="filehandle">Mise en cache de la gestion de fichier</a></h2>
425     
426
427     <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></ul></td></tr></table>
428
429     <p>Le fait d'ouvrir un fichier peut en lui-même introduire un délai,
430     en particulier dans les systèmes de fichiers répartis sur le réseau. Apache
431     peut s'affranchir de ce délai en maintenant
432     un cache des descripteurs de fichiers
433     ouverts pour ce qui concerne les fichiers souvent accédés. Apache propose
434     actuellement une implémentation de mise en cache de la
435     gestion de fichier.</p>
436
437     <h3>Directive CacheFile</h3>
438       
439
440       <p>La forme la plus élémentaire de mise en cache que propose Apache est
441       fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>.
442       Plutôt que de mettre en cache le contenu des fichiers, ce cache maintient
443       une table des descripteurs de fichiers ouverts. Les fichiers à mettre en
444       cache de cette manière sont spécifiés dans le fichier de configuration
445       en utilisant la directive
446       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>.</p>
447
448       <p>La directive
449       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> demande à Apache
450       d'ouvrir le fichier lors de son démarrage et de réutiliser le descripteur
451       de fichier élaboré à cette occasion pour tous les
452       accès ultérieurs à ce fichier.</p>
453
454       <div class="example"><pre>CacheFile /usr/local/apache2/htdocs/index.html</pre></div>
455
456       <p>Si vous avez l'intention de mettre en cache un grand nombre de
457       fichiers de cette manière, vous devez vous assurer que le nombre maximum
458       de fichiers ouverts par votre système d'exploitation est correctement
459       défini.</p>
460
461       <p>Bien que l'utilisation de la directive
462       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>
463       n'entraîne pas la mise en cache du contenu du fichier, cela ne signifie
464       pas qu'en cas de modification du fichier pendant l'exécution d'Apache,
465       ces changements seront pris en compte. Le fichier sera toujours servi
466       dans l'état où il était quand Apache a démarré.</p>
467
468       <p>Si le fichier est supprimé pendant l'exécution d'Apache, ce dernier
469       continuera à maintenir un descripteur de fichier ouvert et à servir le
470       fichier dans l'état où il était quand Apache a démarré. Cela signifie
471       aussi habituellement que malgré le fait que le fichier ait été supprimé,
472       et ne soit
473       plus accessible par le système de fichiers, l'espace libéré ne sera
474       restitué qu'à l'arrêt d'Apache quand le
475       descripteur de fichier sera fermé.</p>
476     
477
478     
479   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
480 <div class="section">
481 <h2><a name="inmemory" id="inmemory">Mise en cache en mémoire</a></h2>
482     
483
484      <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_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/mod_file_cache.html#mmapfile">MMapFile</a></code></li></ul></td></tr></table>
485
486     <p>Servir un contenu directement depuis la mémoire système est
487     universellement reconnu comme la méthode la plus rapide. Lire des fichiers
488     depuis un contrôleur de disque ou pire, depuis un réseau distant est plus
489     lent de plusieurs ordres de grandeur. Les contrôleurs de disque réalisent
490     en général des opérations mécaniques, et l'accès au réseau est limité par la
491     bande passante dont vous disposez. Par contre, les temps d'accès à la
492     mémoire sont de l'ordre de la nano-seconde.</p>
493
494     <p>Cependant la mémoire système n'est pas bon marché; à capacité égale,
495     c'est de loin le type de stockage le plus coûteux et il est important de
496     s'assurer qu'elle est utilisée efficacement. Le fait de mettre en cache
497     des fichiers en mémoire diminue d'autant la quantité de mémoire système
498     disponible. Comme nous le verrons plus loin, ce n'est pas un problème en
499     soi dans le cas de la mise en cache par l'intermédiaire du système
500     d'exploitation, mais si l'on utilise la mise en cache en mémoire propre à
501     Apache, il faut prendre garde à ne pas allouer trop de mémoire au cache.
502     Sinon le système sera contraint d'utiliser le swap, ce qui dégradera
503     sensiblement les performances.</p>
504
505     <h3>Mise en cache par l'intermédiaire du système d'exploitation</h3>
506       
507
508       <p>Dans la plupart des systèmes d'exploitation modernes, c'est le noyau
509       qui gère directement la mise en cache en mémoire des données relatives
510       aux fichiers. C'est une fonctionnalité puissante, et les systèmes
511       d'exploitation s'en acquittent fort bien pour la plus grande partie.
512       Considérons par exemple, dans le cas de Linux, la différence entre le
513       temps nécessaire à la première lecture d'un fichier et le temps
514       nécessaire à sa deuxième lecture;</p>
515
516       <div class="example"><pre>
517 colm@coroebus:~$ time cat testfile &gt; /dev/null
518 real    0m0.065s
519 user    0m0.000s
520 sys     0m0.001s
521 colm@coroebus:~$ time cat testfile &gt; /dev/null
522 real    0m0.003s
523 user    0m0.003s
524 sys     0m0.000s</pre></div>
525
526       <p>Même pour ce petit fichier, il y a une grande différence entre les
527       temps nécessaires pour lire le fichier. Ceci est du au fait que le
528       noyau a mis en cache le contenu du fichier en mémoire.</p>
529
530       <p>Du fait de toujours pouvoir disposer de mémoire système, vous pouvez
531       être assuré qu'il y aura de plus en plus de contenus de fichiers stockés
532       dans ce cache. Ceci peut s'avérer une méthode de mise en cache en mémoire
533       très efficace, et ne nécessite aucune configuration supplémentaire
534       d'Apache.</p>
535
536       <p>De plus, comme le système d'exploitation sait si des fichiers
537       ont été
538       supprimés ou modifiés, il peut effacer automatiquement des contenus de
539       fichiers du cache lorsque cela s'avère nécessaire. Ceci constitue un gros
540       avantage par rapport à la mise en cache en mémoire d'Apache qui n'a
541       aucune possibilité de savoir si un fichier a été modifié.</p>
542     
543
544     <p>En dépit des performances et des avantages de la mise en cache
545     automatique par le système d'exploitation, la mise en cache en mémoire
546     peut être effectuée plus efficacement par Apache dans certaines
547     circonstances.</p>
548
549     <h3>Mise en cache à l'aide de la directive MMapFile</h3>
550       
551
552       <p>La directive <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code>
553       fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> vous permet de
554       demander à Apache de charger un contenu de fichier statique en mémoire
555       lors de son démarrage (à l'aide de l'appel système mmap). Apache
556       utilisera le contenu chargé en mémoire pour satisfaire ultérieurement
557       toutes les demandes d'accès à ce fichier.</p>
558
559       <div class="example"><pre>MMapFile /usr/local/apache2/htdocs/index.html</pre></div>
560
561       <p>Comme dans le cas de la directive
562       <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>, toute
563       modification du fichier ne sera plus prise en compte par Apache une fois
564       ce dernier démarré.</p>
565
566       <p> La directive
567       <code class="directive"><a href="./mod/mod_file_cache.html#mmapfile">MMapFile</a></code> ne gardant
568       pas la trace de la quantité de mémoire qu'elle alloue, vous devez prendre
569       garde de ne pas en abuser. Chaque processus enfant d'Apache utilisant
570       sa propre réplique de la mémoire allouée, il est donc d'une importance
571       critique de s'assurer que les fichiers chargés ne sont pas d'une taille
572       trop importante afin d'épargner au système l'utilisation du swap.</p>
573     
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="disk" id="disk">Mise en cache sur disque</a></h2>
579     
580
581      <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_disk_cache.html">mod_disk_cache</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></ul></td></tr></table>
582
583     <p>Le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> fournit un mécanisme de mise
584     en cache sur disque au module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>. Cette mise en cache est
585     intelligente et le contenu ne sera servi qu'à partir du cache tant qu'il
586     sera considéré comme valide.</p>
587
588     <p>Typiquement, le module sera configuré comme suit :</p>
589
590     <div class="example"><pre>
591 CacheRoot   /var/cache/apache/
592 CacheEnable disk /
593 CacheDirLevels 2
594 CacheDirLength 1</pre></div>
595
596     <p>Il est important de savoir que, les fichiers mis en cache étant stockés
597     localement, la mise en cache par l'intermédiaire du système d'exploitation
598     sera en général aussi appliquée à leurs accès. Si bien que même si les
599     fichiers sont stockés sur disque, s'il font l'objet d'accès fréquents,
600     il est probable que le système d'exploitation s'appliquera à ce qu'ils
601     soient servis à partir de la mémoire.</p>
602
603     <h3>Comprendre le stockage dans le cache</h3>
604       
605
606       <p>Pour stocker des entités dans le cache,
607       le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> crée une empreinte (hash) de 22
608       caractères de l'URL qui a fait l'objet d'une requête. Cette empreinte
609       comprend le nom d'hôte, le protocole, le port, le chemin et tout argument
610       de type CGI associé à l'URL, afin d'être sur que plusieurs URLs
611       n'interfèrent pas entre elles.</p>
612
613       <p>Chaque position de l'empreinte peut contenir un caractère
614       choisi parmi 64 caractères différents, il y a donc
615       64^22 possibilités pour une empreinte. Par exemple, une URL peut posséder
616       l'empreinte <code>xyTGxSMO2b68mBCykqkp1w</code>. Cette empreinte est
617       utilisée pour préfixer les noms de fichiers spécifiques à cette URL à
618       l'intérieur du cache; cependant, elle est tout d'abord placée dans les
619       répertoires du cache selon les directives
620       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code> et
621       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>.</p>
622
623       <p>La directive
624       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code>
625       définit le nombre de niveaux de sous-répertoires, et
626       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>
627       le nombre de caractères composant le nom des sous-répertoires. Dans
628       l'exemple donné plus haut, l'empreinte se trouvera à :
629       <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code>.</p>
630
631       <p>Cette technique a pour but principal de réduire le nombre de
632       sous-répertoires ou de fichiers contenus dans un répertoire particulier,
633       car le fonctionnement de la plupart des systèmes de fichiers est ralenti
634       quand ce nombre augmente. Avec la valeur "1" pour la directive
635       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>,
636       il peut y avoir au plus 64 sous-répertoires à un niveau quelconque.
637       Avec la valeur "2", il peut y en avoir 64 * 64, etc...
638       A moins d'avoir une bonne raison pour ne pas le faire, l'utilisation de
639       la valeur "1" pour la directive
640       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>
641       est recommandée.</p>
642
643       <p>Le paramétrage de la directive
644       <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code>
645       dépend du nombre de fichiers que vous pensez stocker dans le cache.
646       Avec une valeur de "2" comme dans l'exemple donné plus haut,
647       4096 sous-répertoires peuvent être créés au total. Avec 1 million de
648       fichiers dans le cache, cela équivaut à environ 245 URLs mises en cache
649       dans chaque répertoire.</p>
650
651       <p>Chaque URL nécessite au moins deux fichiers dans le cache. Ce sont en
652       général un fichier ".header", qui contient des meta-informations à propos
653       de l'URL, comme la date de son arrivée à expiration,
654       et un fichier ".data" qui est la copie exacte du contenu à servir.</p>
655
656       <p>Dans le cas d'un contenu négocié via l'en-tête "Vary", un répertoire
657       ".vary" sera créé pour l'URL en question. Ce répertoire contiendra de
658       multiples fichiers ".data" correspondant aux différents contenus
659       négociés.</p>
660     
661
662     <h3>Maintenance du cache sur disque</h3>
663       
664
665       <p>Bien que le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> supprime un contenu
666       du cache lorsqu'il est arrivé à expiration, il ne maintient aucune
667       information à propos de la taille totale du cache ou de l'espace restant
668       disponible.</p>
669
670       <p>Par contre l'utilitaire
671       <a href="programs/htcacheclean.html">htcacheclean</a> fourni avec Apache
672       vous permet, comme son nom l'indique, de nettoyer le cache périodiquement.
673       Déterminer la fréquence à laquelle lancer <a href="programs/htcacheclean.html">htcacheclean</a> et la taille souhaitée
674       pour le cache est une tâche relativement complexe et il vous faudra de
675       nombreux essais et erreurs pour arriver à sélectionner des valeurs
676       optimales.</p>
677
678       <p><a href="programs/htcacheclean.html">htcacheclean</a> opère selon deux
679       modes. Il peut s'exécuter comme démon résident, ou être lancé
680       périodiquement par cron. <a href="programs/htcacheclean.html">htcacheclean</a> peut mettre une heure
681       ou plus pour traiter de très grands caches (plusieurs dizaines de
682       Gigaoctets) et si vous l'exécutez à partir de cron, il vous est
683       conseillé de déterminer la durée typique d'un traitement, afin d'éviter
684       d'exécuter plusieurs instances à la fois.</p>
685
686       <p class="figure">
687       <img src="images/caching_fig1.gif" alt="" width="600" height="406" /><br />
688       <a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Croissance
689       typique du cache / séquence de nettoyage.</p>
690
691       <p>Comme <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> ne tient pas compte de l'espace
692       utilisé dans le cache, vous devez vous assurer que
693       <a href="programs/htcacheclean.html">htcacheclean</a> est configuré de
694       façon à laisser suffisamment d'"espace de croissance"
695       à la suite d'un nettoyage.</p>
696     
697
698   </div></div>
699 <div class="bottomlang">
700 <p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
701 <a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a> |
702 <a href="./tr/caching.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
703 </div><div id="footer">
704 <p class="apache">Copyright 2009 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
705 <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>
706 </body></html>