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