Blame docs/manual/caching.html.fr.utf8

Packit 90a5c9
Packit 90a5c9
Packit 90a5c9
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
Packit 90a5c9
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
Packit 90a5c9
Packit 90a5c9
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 90a5c9
              This file is generated from xml source: DO NOT EDIT
Packit 90a5c9
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 90a5c9
      -->
Packit 90a5c9
<title>Guide de la mise en cache - Serveur HTTP Apache Version 2.4</title>
Packit 90a5c9
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
Packit 90a5c9
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
Packit 90a5c9
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
Packit 90a5c9
<script src="./style/scripts/prettify.min.js" type="text/javascript">
Packit 90a5c9
</script>
Packit 90a5c9
Packit 90a5c9
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
Packit 90a5c9
<body id="manual-page">
Packit 90a5c9

Modules | Directives | FAQ | Glossaire | Plan du site

Packit 90a5c9

Serveur HTTP Apache Version 2.4

Packit 90a5c9
Packit 90a5c9
<-
Packit 90a5c9
Packit 90a5c9
Apache > Serveur HTTP > Documentation > Version 2.4

Guide de la mise en cache

Packit 90a5c9
Packit 90a5c9

Langues Disponibles:  en  |

Packit 90a5c9
 fr  |
Packit 90a5c9
 tr 

Packit 90a5c9
Packit 90a5c9
Packit 90a5c9
    

Ce document complète la documentation de référence des modules

Packit 90a5c9
    mod_cache, mod_cache_disk,
Packit 90a5c9
    mod_file_cache et du programme htcacheclean.
Packit 90a5c9
    Il décrit l'utilisation des fonctionnalités de mise en
Packit 90a5c9
    cache du serveur HTTP Apache
Packit 90a5c9
    pour accélérer les services web et proxy, tout en évitant les problèmes
Packit 90a5c9
    courants et les erreurs de configuration.

Packit 90a5c9
  
Packit 90a5c9
Packit 90a5c9
  • Mise en cache HTTP à trois états RFC2616
  • Packit 90a5c9
  • Exemples de configuration du cache
  • Packit 90a5c9
  • Mise en cache générale d'objets partagés à deux états de forme
  • Packit 90a5c9
        clé/valeur
    Packit 90a5c9
  • Mise en cache à base de fichiers spécialisés
  • Packit 90a5c9
  • Considérations sur la sécurité
  • Packit 90a5c9

    Voir aussi

    Packit 90a5c9
    top
    Packit 90a5c9
    Packit 90a5c9

    Introduction

    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Le serveur HTTP Apache offre tout un ensemble de fonctionnalités

    Packit 90a5c9
        de mise en cache qui ont été conçues pour améliorer les performances
    Packit 90a5c9
        du serveur de différentes manières.

    Packit 90a5c9
    Packit 90a5c9
        
    Packit 90a5c9
            
    Mise en cache HTTP à trois états RFC2616
    Packit 90a5c9
            
    mod_cache et son module de fournisseur
    Packit 90a5c9
    	mod_cache_disk proposent une mise en cache
    Packit 90a5c9
    	intelligente de niveau HTTP. Le contenu proprement dit est
    Packit 90a5c9
    	stocké dans le cache, et mod_cache vise à respecter tous les
    Packit 90a5c9
    	en-têtes HTTP, ainsi que les options qui contrôlent la mise en
    Packit 90a5c9
    	cache du contenu comme décrit dans la Section
    Packit 90a5c9
    	13 de la RFC2616. mod_cache peut gérer des
    Packit 90a5c9
    	configurations de mise en cache simples, mais aussi complexes
    Packit 90a5c9
    	comme dans les cas où vous avez à faire à des contenus mandatés,
    Packit 90a5c9
    	à des contenus locaux dynamiques, ou lorsque vous avez besoin
    Packit 90a5c9
    	d'accélérer l'accès aux fichiers locaux situés sur disque
    Packit 90a5c9
    	supposé lent.
    Packit 90a5c9
            
    Packit 90a5c9
    Packit 90a5c9
            
    Mise en cache d'objets partagés de forme clé/valeur à deux
    Packit 90a5c9
    	états
    Packit 90a5c9
            
    Packit 90a5c9
                L'API du cache d'objets partagés (socache)
    Packit 90a5c9
    	    et ses modules de fournisseurs
    Packit 90a5c9
    	    proposent une mise en cache d'objets partagés à base de
    Packit 90a5c9
    	    couples clé/valeur de niveau serveur. Ces modules sont
    Packit 90a5c9
    	    conçus pour la mise en cache de données de bas niveau comme
    Packit 90a5c9
    	    les sessions SSL et les données d'authentification. les
    Packit 90a5c9
    	    serveurs d'arrière-plan permettent le stockage des données
    Packit 90a5c9
    	    au niveau serveur en mémoire partagée, ou au niveau
    Packit 90a5c9
    	    datacenter dans un cache comme memcache ou distcache.
    Packit 90a5c9
            
    Packit 90a5c9
    Packit 90a5c9
            
    Mise en cache de fichiers spécialisée
    Packit 90a5c9
            
    Packit 90a5c9
                mod_file_cache offre la possibilité de
    Packit 90a5c9
    	    précharger des fichiers en mémoire au démarrage du serveur,
    Packit 90a5c9
    	    et peut améliorer les temps d'accès et sauvegarder les
    Packit 90a5c9
    	    gestionnaires de fichiers pour les fichiers qui font l'objet
    Packit 90a5c9
    	    d'accès fréquents, évitant ainsi d'avoir à accéder au disque
    Packit 90a5c9
    	    à chaque requête.
    Packit 90a5c9
            
    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Pour tirer parti efficacement de ce document, les bases de HTTP doivent

    Packit 90a5c9
        vous être familières, et vous devez avoir lu les sections
    Packit 90a5c9
        Mise en correspondance des
    Packit 90a5c9
        URLs avec le système de fichiers et
    Packit 90a5c9
        Négociation sur le contenu
    Packit 90a5c9
        du guide de l'utilisateur.

    Packit 90a5c9
    Packit 90a5c9
      
    top
    Packit 90a5c9
    Packit 90a5c9

    Mise en cache HTTP à trois états RFC2616

    Packit 90a5c9
    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Le module mod_cache permet de tirer avantage du

    Packit 90a5c9
        mécanisme de mise en cache en ligne faisant partie
    Packit 90a5c9
        intégrante du protocole HTTP, et décrit dans la section
    Packit 90a5c9
        13 de la RFC2616.

    Packit 90a5c9
    Packit 90a5c9
        

    A la différence d'un cache simple clé/valeur à deux états où le

    Packit 90a5c9
        contenu est supprimé lorsqu'il est périmé, un cache HTTP comporte un
    Packit 90a5c9
        mécanisme permettant de conserver temporairement un contenu périmé,
    Packit 90a5c9
        de demander au serveur original si ce contenu périmé a été modifié,
    Packit 90a5c9
        et dans le cas contraire de le rendre à nouveau valide.

    Packit 90a5c9
    Packit 90a5c9
        

    Une entrée d'un cache HTTP peut se présenter sous un de ces trois

    Packit 90a5c9
        états :

    Packit 90a5c9
    Packit 90a5c9
        
    Packit 90a5c9
        
    Frais
    Packit 90a5c9
        
    Packit 90a5c9
            Si un contenu est suffisamment récent (plus jeune que sa
    Packit 90a5c9
    	durée de fraîcheur), il est considéré comme
    Packit 90a5c9
    	frais. Un cache HTTP peut servir un contenu
    Packit 90a5c9
    	frais sans avoir à demander quoi que ce soit au serveur
    Packit 90a5c9
    	d'origine.
    Packit 90a5c9
        
    Packit 90a5c9
        
    Périmé
    Packit 90a5c9
        
    Packit 90a5c9
            

    Si le contenu est trop ancien (plus vieux que sa

    Packit 90a5c9
    	durée de fraîcheur), il est considéré comme
    Packit 90a5c9
    	périmé. Un cache HTTP doit contacter le serveur
    Packit 90a5c9
    	original pour vérifier si le contenu, même s'il est périmé, est
    Packit 90a5c9
    	encore à jour avant de le servir au client. Soit le serveur
    Packit 90a5c9
    	original va répondre en envoyant un contenu de remplacement si
    Packit 90a5c9
    	le contenu périmé n'est plus à jour, soit dans le cas idéal il
    Packit 90a5c9
    	renverra un code pour signaler au cache que le contenu est
    Packit 90a5c9
    	encore à jour, et qu'il est inutile de le générer ou de
    Packit 90a5c9
    	l'envoyer à nouveau. Le contenu repasse à l'état "frais" et le
    Packit 90a5c9
    	cycle continue.

    Packit 90a5c9
    Packit 90a5c9
            

    Le protocole HTTP permet au cache de servir des données

    Packit 90a5c9
    	périmées dans certaines circonstances, comme lorsqu'une
    Packit 90a5c9
    	tentative de rafraîchir une entrée depuis un serveur original
    Packit 90a5c9
    	se solde par un échec avec un code d'erreur 5xx, ou lorsqu'une
    Packit 90a5c9
    	autre requête est déjà en train d'essayer de rafraîchir la même
    Packit 90a5c9
    	entrée. Dans ces cas, un en-tête Warning est ajouté
    Packit 90a5c9
    	à la réponse.

    Packit 90a5c9
        
    Packit 90a5c9
        
    Non Existent
    Packit 90a5c9
        
    Packit 90a5c9
            Si le cache est plein, il se réserve la possibilité de supprimer
    Packit 90a5c9
    	des entrées pour faire de la place. Une entrée peut être
    Packit 90a5c9
    	supprimée à tout moment, qu'elle soit fraîche ou périmée.
    Packit 90a5c9
    	L'outil htcacheclean
    Packit 90a5c9
    	peut être utilisé à la demande, ou lancé en tant que démon afin
    Packit 90a5c9
    	de conserver la taille du cache ou le nombre d'inodes en deçà de
    Packit 90a5c9
    	valeurs spécifiées. Cet outil essaie cependant de
    Packit 90a5c9
    	supprimer les entrées périmées avant les entrées fraîches.
    Packit 90a5c9
        
    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Le fonctionnement détaillé d'un cache HTTP est décrit dans la Section

    Packit 90a5c9
        13 de la RFC2616.

    Packit 90a5c9
    Packit 90a5c9
        

    Interaction avec le serveur

    Packit 90a5c9
          
    Packit 90a5c9
    Packit 90a5c9
          

    Le module mod_cache interagit avec le serveur

    Packit 90a5c9
          à deux niveaux possibles en fonction de la directive CacheQuickHandler :
    Packit 90a5c9
          

    Packit 90a5c9
    Packit 90a5c9
          
    Packit 90a5c9
            
    Phase de gestion rapide
    Packit 90a5c9
            
    Packit 90a5c9
              

    Cette phase se déroule très tôt au cours du traitement de

    Packit 90a5c9
    	  la requête, juste après l'interprétation de cette dernière. Si
    Packit 90a5c9
    	  le contenu se trouve dans le cache, il est servi immédiatement
    Packit 90a5c9
    	  et pratiquement tout le reste du traitement de la requête est
    Packit 90a5c9
    	  court-circuité.

    Packit 90a5c9
    Packit 90a5c9
                  

    Dans ce scénario, le cache se comporte comme s'il avait

    Packit 90a5c9
    	      été "boulonné" à l'entrée du serveur.

    Packit 90a5c9
                  
    Packit 90a5c9
                  

    Ce mode possède les meilleures performances car la

    Packit 90a5c9
    	      majorité des traitements au niveau du serveur sont
    Packit 90a5c9
    	      court-circuités. Cependant, il court-circuite aussi les
    Packit 90a5c9
    	      phases d'authentification et d'autorisation du traitement
    Packit 90a5c9
    	      au niveau du serveur, et il doit donc être utilisé avec
    Packit 90a5c9
    	      prudence lorsque que ces phases sont importantes.

    Packit 90a5c9
    Packit 90a5c9
    	      

    Les requêtes comportant un en-tête "Authorization"

    Packit 90a5c9
    	      (comme par exemple l'authentification HTTP basique) ne
    Packit 90a5c9
    	      peuvent être ni mises en cache, ni servies depuis ce
    Packit 90a5c9
    	      dernier lorsque mod_cache s'exécute dans
    Packit 90a5c9
    	      cette phase.

    Packit 90a5c9
              
    Packit 90a5c9
              
    Phase de gestion normale
    Packit 90a5c9
              
    Packit 90a5c9
                  

    Cette phase se déroule très tard au cours du traitement

    Packit 90a5c9
    	      de la requête, en fait après toutes les phases de ce
    Packit 90a5c9
    	      traitement.

    Packit 90a5c9
    Packit 90a5c9
                  

    Dans ce scénario, le cache se comporte comme s'il avait

    Packit 90a5c9
    	      été "boulonné" à la sortie du serveur.

    Packit 90a5c9
    Packit 90a5c9
                  

    Ce mode offre la plus grande souplesse, car il permet

    Packit 90a5c9
    	      de faire intervenir la mise en cache en un point
    Packit 90a5c9
    	      précisément spécifié de la chaîne de filtrage, et le
    Packit 90a5c9
    	      contenu issu du cache peut être filtré ou personnalisé
    Packit 90a5c9
    	      avant d'être servi au client.

    Packit 90a5c9
              
    Packit 90a5c9
            
    Packit 90a5c9
    Packit 90a5c9
            

    Si l'URL ne se trouve pas dans le cache,

    Packit 90a5c9
    	mod_cache ajoutera un filtre à la chaîne de filtrage afin
    Packit 90a5c9
    	d'enregistrer la réponse dans le cache, puis passera la main
    Packit 90a5c9
    	pour permettre le déroulement normal de la suite du traitement
    Packit 90a5c9
    	de la requête. Si la mise en cache du contenu est autorisée, il
    Packit 90a5c9
    	sera enregistré dans le cache pour pouvoir être servi à nouveau
    Packit 90a5c9
    	; dans le cas contraire, le contenu sera ignoré.

    Packit 90a5c9
    Packit 90a5c9
            

    Si le contenu trouvé dans le cache est périmé, le module

    Packit 90a5c9
    	mod_cache convertit la requête en
    Packit 90a5c9
    	requête conditionnelle. Si le serveur original
    Packit 90a5c9
    	renvoie une réponse normale, elle est enregistrée dans le cache
    Packit 90a5c9
    	en lieu et place du contenu périmé. Si le serveur original
    Packit 90a5c9
    	renvoie une réponse "304 Not Modified", le contenu repasse à
    Packit 90a5c9
    	l'état "frais" et est servi par le filtre au lieu d'être
    Packit 90a5c9
    	sauvegardé.

    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Amélioration du taux de présence dans le cache

    Packit 90a5c9
          
    Packit 90a5c9
    Packit 90a5c9
          

    Lorsqu'un serveur virtuel est connu sous la forme d'un des

    Packit 90a5c9
          nombreux alias du serveur, la définition de la directive
    Packit 90a5c9
          UseCanonicalName à
    Packit 90a5c9
          On peut augmenter de manière significative le nombre
    Packit 90a5c9
          de correspondances positives dans le cache. Ceci est du au fait
    Packit 90a5c9
          que la clé du cache contient le nom d'hôte du serveur virtuel.     
    Packit 90a5c9
          Avec UseCanonicalName positionnée
    Packit 90a5c9
          à On,
    Packit 90a5c9
          les hôtes virtuels possédant plusieurs noms de serveur ou alias ne
    Packit 90a5c9
          généreront pas d'entités de cache différentes, et le contenu sera mis en
    Packit 90a5c9
          cache en faisant référence au nom d'hôte canonique.

    Packit 90a5c9
    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Durée de fraîcheur

    Packit 90a5c9
          
    Packit 90a5c9
    Packit 90a5c9
           

    Un contenu bien formé destiné à être mis en cache doit déclarer

    Packit 90a5c9
           explicitement une durée de fraîcheur via les champs
    Packit 90a5c9
           max-age ou s-maxage de l'en-tête
    Packit 90a5c9
           Cache-Control, ou en incluant un en-tête
    Packit 90a5c9
           Expires.

    Packit 90a5c9
          
    Packit 90a5c9
          

    De plus, un client peut passer outre la durée de fraîcheur

    Packit 90a5c9
          définie pour le serveur original en ajoutant son propre en-tête
    Packit 90a5c9
          Cache-Control à la requête. Dans ce cas, c'est la
    Packit 90a5c9
          durée de fraîcheur la plus basse entre la requête et la réponse
    Packit 90a5c9
          qui l'emporte.

    Packit 90a5c9
    Packit 90a5c9
          

    Lorsque cette durée de fraîcheur est absente de la requête ou

    Packit 90a5c9
          de la réponse, une durée de fraîcheur par défaut s'applique. La
    Packit 90a5c9
          durée de fraîcheur par défaut des entrées du cache est d'une heure
    Packit 90a5c9
          ; elle peut cependant être facilement modifiée à l'aide de
    Packit 90a5c9
          la directive CacheDefaultExpire.

    Packit 90a5c9
    Packit 90a5c9
          

    Si une réponse ne contient pas d'en-tête Expires mais

    Packit 90a5c9
          inclut un en-tête Last-Modified, mod_cache
    Packit 90a5c9
          peut déduire une durée de fraîcheur en se basant sur une
    Packit 90a5c9
          heuristique, qui peut être contrôlée via la directive CacheLastModifiedFactor.

    Packit 90a5c9
    Packit 90a5c9
          

    Pour les contenus locaux, ou les contenus distants qui ne

    Packit 90a5c9
          spécifient pas leur propre en-tête Expires,
    Packit 90a5c9
          mod_expires permet de régler finement la durée de
    Packit 90a5c9
          fraîcheur via les paramètres max-age et
    Packit 90a5c9
          Expires.

    Packit 90a5c9
    Packit 90a5c9
          

    On peut aussi contrôler la durée de fraîcheur maximale en utilisant

    Packit 90a5c9
          la directive CacheMaxExpire.

    Packit 90a5c9
    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Guide succinct des requêtes conditionnelles

    Packit 90a5c9
          
    Packit 90a5c9
    Packit 90a5c9
         

    Lorsqu'un contenu du cache est périmé, httpd modifie la requête

    Packit 90a5c9
         pour en faire une requête conditionnelle

    Packit 90a5c9
    Packit 90a5c9
          

    Lorsque la réponse originale du cache contient un en-tête

    Packit 90a5c9
          ETag, mod_cache ajoute un en-tête
    Packit 90a5c9
          If-None-Match à la requête envoyée au serveur
    Packit 90a5c9
          d'origine. Lorsque la réponse originale du cache contient un en-tête
    Packit 90a5c9
          Last-Modified, mod_cache ajoute un en-tête
    Packit 90a5c9
          If-Modified-Since à la requête envoyée au serveur
    Packit 90a5c9
          d'origine. Dans ces deux cas, la requête devient une requête
    Packit 90a5c9
          conditionnelle.

    Packit 90a5c9
    Packit 90a5c9
          

    Lorsqu'un serveur d'origine reçoit une requête conditionnelle,

    Packit 90a5c9
          il vérifie si le paramètre Etag ou Last-Modified a été modifié en
    Packit 90a5c9
          fonction des paramètres de la requête. Si ce n'est pas le cas, il
    Packit 90a5c9
          répondra avec le message lapidaire "304 Not Modified". Ceci
    Packit 90a5c9
          informe le cache que le contenu est périmé mais encore à jour, et
    Packit 90a5c9
          peut être utilisé tel quel pour les prochaines requêtes jusqu'à ce
    Packit 90a5c9
          qu'il atteigne à nouveau sa date de péremption.

    Packit 90a5c9
    Packit 90a5c9
          

    Si le contenu a été modifié, il est servi comme s'il s'agissait

    Packit 90a5c9
          d'une requête normale et non conditionnelle.

    Packit 90a5c9
    Packit 90a5c9
          

    Les requêtes conditionnelles offrent deux avantages. D'une

    Packit 90a5c9
          part, il est facile de déterminer si le contenu du serveur
    Packit 90a5c9
          d'origine correspond à celui situé
    Packit 90a5c9
          dans le cache, et ainsi d'économiser la consommation de ressources
    Packit 90a5c9
          nécessaire au transfert du contenu dans son ensemble.

    Packit 90a5c9
    Packit 90a5c9
          

    D'autre part, un serveur d'origine bien conçu sera configuré de

    Packit 90a5c9
          telle manière que les requêtes conditionnelles nécessitent pour
    Packit 90a5c9
          leur production bien moins de ressources qu'une réponse complète.
    Packit 90a5c9
          Dans le cas des fichiers statiques, il suffit en général d'un
    Packit 90a5c9
          appel système de type stat() ou similaire pour
    Packit 90a5c9
          déterminer si la taille ou la date de modification du fichier a
    Packit 90a5c9
          été modifiée. Ainsi, même un contenu local pourra être servi plus
    Packit 90a5c9
          rapidement depuis le cache s'il n'a pas été modifié.

    Packit 90a5c9
          
    Packit 90a5c9
          

    Il serait souhaitable que tous les serveurs d'origine

    Packit 90a5c9
          supportent les requêtes conditionnelles, car dans le cas
    Packit 90a5c9
          contraire, ils répondent comme s'il s'agissait d'une requête
    Packit 90a5c9
          normale, et le cache répond comme si le contenu avait été
    Packit 90a5c9
          modifié et enregistre ce dernier. Le cache se comporte alors
    Packit 90a5c9
          comme un simple cache à deux état, où le contenu est servi s'il
    Packit 90a5c9
          est à jour, ou supprimé dans le cas contraire.

    Packit 90a5c9
        
    Packit 90a5c9
    Packit 90a5c9
        

    Que peut-on mettre en cache ?

    Packit 90a5c9
          
    Packit 90a5c9
    Packit 90a5c9
          

    La liste complète des conditions nécessaires pour qu'une

    Packit 90a5c9
          réponse puisse être enregistrée dans un cache HTTP est fournie
    Packit 90a5c9
          dans la section
    Packit 90a5c9
          13.4 Response Cacheability de la RFC2616, et peut se résumer
    Packit 90a5c9
          ainsi :

    Packit 90a5c9
    Packit 90a5c9
          
      Packit 90a5c9
              
    1. La mise en cache doit être activée pour cette URL. Voir les
    2. Packit 90a5c9
      	directives CacheEnable et CacheDisable.
      Packit 90a5c9
      Packit 90a5c9
              
    3. Si la reponse possède un code de statut HTTP autre que 200, 203, 300, 301
    4. Packit 90a5c9
      	ou 410, elle doit aussi comporter un en-tête "Expires" ou
      Packit 90a5c9
      	"Cache-Control".
      Packit 90a5c9
      Packit 90a5c9
              
    5. La requête doit être de type HTTP GET.
    6. Packit 90a5c9
      Packit 90a5c9
              
    7. Si la réponse contient un en-tête "Authorization:", elle doit aussi
    8. Packit 90a5c9
      	contenir une option "s-maxage", "must-revalidate" ou "public"
      Packit 90a5c9
      	dans l'en-tête "Cache-Control:".
      Packit 90a5c9
      Packit 90a5c9
              
    9. Si l'URL contient une chaîne de requête
    10. Packit 90a5c9
      	(provenant par exemple d'une méthode GET de formulaire HTML), elle ne
      Packit 90a5c9
      	sera pas mise en cache, à moins que la réponse ne
      Packit 90a5c9
      	spécifie explicitement un délai d'expiration via un
      Packit 90a5c9
      	en-tête "Expires:" ou une directive max-age ou s-maxage de
      Packit 90a5c9
      	l'en-tête "Cache-Control:" comme indiqué dans les
      Packit 90a5c9
      	sections 13.2.1. et 13.9 de la RFC2616.
      Packit 90a5c9
      Packit 90a5c9
              
    11. Si la réponse a un statut de 200 (OK), elle doit aussi contenir
    12. Packit 90a5c9
      	au moins un des en-têtes "Etag", "Last-Modified" ou
      Packit 90a5c9
              "Expires", ou une directive max-age ou s-maxage de
      Packit 90a5c9
      	l'en-tête "Cache-Control:", à moins que la directive
      Packit 90a5c9
              CacheIgnoreNoLastMod
      Packit 90a5c9
              ne précise d'autres contraintes.
      Packit 90a5c9
      Packit 90a5c9
              
    13. Si la réponse contient l'option "private" dans un en-tête
    14. Packit 90a5c9
      	"Cache-Control:", elle ne sera pas mise en cache à moins que la
      Packit 90a5c9
      	directive
      Packit 90a5c9
              CacheStorePrivate
      Packit 90a5c9
      	ne précise d'autres contraintes.
      Packit 90a5c9
      Packit 90a5c9
              
    15. De même, si la réponse contient l'option "no-store" dans un en-tête
    16. Packit 90a5c9
              "Cache-Control:", elle ne sera pas mise en cache à moins que la
      Packit 90a5c9
      	directive
      Packit 90a5c9
              CacheStoreNoStore
      Packit 90a5c9
      	n'ait été utilisée.
      Packit 90a5c9
      Packit 90a5c9
              
    17. Une réponse ne sera pas mise en cache si elle comporte un en-tête
    18. Packit 90a5c9
      	"Vary:" contenant le caractère "*" qui correspond à toute
      Packit 90a5c9
      	chaîne de caractères.
      Packit 90a5c9
            
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Qu'est ce qui ne doit pas être mis en cache ?

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le client qui crée la requête ou le serveur d'origine qui

      Packit 90a5c9
            génère la réponse doit être à même de déterminer si le contenu
      Packit 90a5c9
            doit pouvoir être mis en cache ou non en définissant correctement
      Packit 90a5c9
            l'en-tête Cache-Control, et
      Packit 90a5c9
            mod_cache sera alors en mesure de satisfaire les
      Packit 90a5c9
            souhaits du client ou du serveur de manière appropriée.
      Packit 90a5c9
            

      Packit 90a5c9
      Packit 90a5c9
            

      Les contenus qui varient au cours du temps, ou en fonction de

      Packit 90a5c9
            particularités de la requête non prises en compte par la
      Packit 90a5c9
            négociation HTTP ne doivent pas être mis en cache. Ce type de
      Packit 90a5c9
            contenu doit se déclarer lui-même "à ne pas mettre en cache" via
      Packit 90a5c9
            l'en-tête Cache-Control.

      Packit 90a5c9
            
      Packit 90a5c9
            

      Si le contenu change souvent, suite par exemple à une durée de

      Packit 90a5c9
            fraîcheur de l'ordre de la minute ou de la seconde, il peut tout
      Packit 90a5c9
            de même être mis en cache, mais il est alors fortement souhaitable
      Packit 90a5c9
            que le serveur d'origine supporte correctement les
      Packit 90a5c9
            requêtes conditionnelles afin que des réponses
      Packit 90a5c9
            complètes ne soient pas systématiquement générées.

      Packit 90a5c9
      Packit 90a5c9
            

      Un contenu qui varie en fonction d'en-têtes de requête fournis

      Packit 90a5c9
            par le client peut être mis en cache, sous réserve d'une
      Packit 90a5c9
            utilisation appropriée de l'en-tête de réponse Vary.

      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Contenu variable et/ou négocié

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Lorsque le serveur d'origine est configuré pour servir des

      Packit 90a5c9
            contenus différents en fonction de la valeur de certains en-têtes
      Packit 90a5c9
            de la requête, par exemple pour servir une ressource en plusieurs
      Packit 90a5c9
            langages à partir d'une seule URL, le mécanisme de mise en cache
      Packit 90a5c9
            d'HTTP permet de mettre en cache plusieurs variantes de la même
      Packit 90a5c9
            page à partir d'une seule URL.

      Packit 90a5c9
            
      Packit 90a5c9
            

      Pour y parvenir, le serveur d'origine ajoute un en-tête

      Packit 90a5c9
            Vary pour indiquer quels en-têtes doivent être pris
      Packit 90a5c9
            en compte par un cache pour déterminer si deux variantes sont
      Packit 90a5c9
            différentes l'une de l'autre.

      Packit 90a5c9
      Packit 90a5c9
            

      Si par exemple, une réponse est reçue avec l'en-tête Vary suivant,

      Packit 90a5c9
      Packit 90a5c9
            

      Packit 90a5c9
      Vary: negotiate,accept-language,accept-charset
      Packit 90a5c9
            

      Packit 90a5c9
      Packit 90a5c9
            

      mod_cache ne servira aux demandeurs que le contenu

      Packit 90a5c9
            mis en cache qui correspond au contenu des en-têtes accept-language et
      Packit 90a5c9
            accept-charset de la requête originale.

      Packit 90a5c9
      Packit 90a5c9
            

      Plusieurs variantes d'un contenu peuvent être mises en cache

      Packit 90a5c9
            simultanément ; mod_cache utilise l'en-tête
      Packit 90a5c9
            Vary et les valeurs correspondantes des en-têtes de
      Packit 90a5c9
            la requête spécifiés dans ce dernier pour
      Packit 90a5c9
            déterminer quelle variante doit être servie au client.

      Packit 90a5c9
                
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          
      top
      Packit 90a5c9
      Packit 90a5c9

      Exemples de configuration du cache

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Mise en cache sur disque

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le module mod_cache s'appuie sur des

      Packit 90a5c9
            implémentations de stockage sous-jacentes spécifiques pour gérer
      Packit 90a5c9
            le cache ; à ce titre, mod_cache_disk fournit le
      Packit 90a5c9
            support de la mise en cache sur disque.

      Packit 90a5c9
      Packit 90a5c9
            

      En général, le module se configure comme suit :

      Packit 90a5c9
      Packit 90a5c9
            
      CacheRoot   "/var/cache/apache/"
      Packit 90a5c9
      CacheEnable disk /
      Packit 90a5c9
      CacheDirLevels 2
      Packit 90a5c9
      CacheDirLength 1
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
          

      Il est important de savoir que, les fichiers mis en cache étant stockés

      Packit 90a5c9
          localement, la mise en cache par l'intermédiaire du système d'exploitation
      Packit 90a5c9
          sera en général aussi appliquée à leurs accès. Si bien que même si les
      Packit 90a5c9
          fichiers sont stockés sur disque, s'il font l'objet d'accès fréquents,
      Packit 90a5c9
          il est probable que le système d'exploitation s'appliquera à ce qu'ils
      Packit 90a5c9
          soient servis à partir de la mémoire.

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Comprendre le stockage dans le cache

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Pour stocker des entités dans le cache,

      Packit 90a5c9
            le module mod_cache_disk crée une empreinte (hash) de 22
      Packit 90a5c9
            caractères de l'URL qui a fait l'objet d'une requête. Cette empreinte
      Packit 90a5c9
            comprend le nom d'hôte, le protocole, le port, le chemin et tout argument
      Packit 90a5c9
            de type CGI associé à l'URL, ainsi que les éléments
      Packit 90a5c9
            spécifiés dans l'en-tête Vary afin d'être sur que plusieurs URLs
      Packit 90a5c9
            n'interfèrent pas entre elles.

      Packit 90a5c9
      Packit 90a5c9
            

      Chaque position de l'empreinte peut contenir un caractère

      Packit 90a5c9
            choisi parmi 64 caractères différents, il y a donc
      Packit 90a5c9
            64^22 possibilités pour une empreinte. Par exemple, une URL peut posséder
      Packit 90a5c9
            l'empreinte xyTGxSMO2b68mBCykqkp1w. Cette empreinte est
      Packit 90a5c9
            utilisée pour préfixer les noms de fichiers spécifiques à cette URL à
      Packit 90a5c9
            l'intérieur du cache; cependant, elle est tout d'abord placée dans les
      Packit 90a5c9
            répertoires du cache selon les directives
      Packit 90a5c9
            CacheDirLevels et
      Packit 90a5c9
            CacheDirLength.

      Packit 90a5c9
      Packit 90a5c9
            

      La directive

      Packit 90a5c9
            CacheDirLevels
      Packit 90a5c9
            définit le nombre de niveaux de sous-répertoires, et
      Packit 90a5c9
            CacheDirLength
      Packit 90a5c9
            le nombre de caractères composant le nom des sous-répertoires. Dans
      Packit 90a5c9
            l'exemple donné plus haut, l'empreinte se trouvera à :
      Packit 90a5c9
            /var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w.

      Packit 90a5c9
      Packit 90a5c9
            

      Cette technique a pour but principal de réduire le nombre de

      Packit 90a5c9
            sous-répertoires ou de fichiers contenus dans un répertoire particulier,
      Packit 90a5c9
            car le fonctionnement de la plupart des systèmes de fichiers est ralenti
      Packit 90a5c9
            quand ce nombre augmente. Avec la valeur "1" pour la directive
      Packit 90a5c9
            CacheDirLength,
      Packit 90a5c9
            il peut y avoir au plus 64 sous-répertoires à un niveau quelconque.
      Packit 90a5c9
            Avec la valeur "2", il peut y en avoir 64 * 64, etc...
      Packit 90a5c9
            A moins d'avoir une bonne raison pour ne pas le faire, l'utilisation de
      Packit 90a5c9
            la valeur "1" pour la directive
      Packit 90a5c9
            CacheDirLength
      Packit 90a5c9
            est recommandée.

      Packit 90a5c9
      Packit 90a5c9
            

      Le paramétrage de la directive

      Packit 90a5c9
            CacheDirLevels
      Packit 90a5c9
            dépend du nombre de fichiers que vous pensez stocker dans le cache.
      Packit 90a5c9
            Avec une valeur de "2" comme dans l'exemple donné plus haut,
      Packit 90a5c9
            4096 sous-répertoires peuvent être créés au total. Avec 1 million de
      Packit 90a5c9
            fichiers dans le cache, cela équivaut à environ 245 URLs mises en cache
      Packit 90a5c9
            dans chaque répertoire.

      Packit 90a5c9
      Packit 90a5c9
            

      Chaque URL nécessite au moins deux fichiers dans le cache. Ce sont en

      Packit 90a5c9
            général un fichier ".header", qui contient des meta-informations à propos
      Packit 90a5c9
            de l'URL, comme la date de son arrivée à expiration,
      Packit 90a5c9
            et un fichier ".data" qui est la copie exacte du contenu à servir.

      Packit 90a5c9
      Packit 90a5c9
            

      Dans le cas d'un contenu négocié via l'en-tête "Vary", un répertoire

      Packit 90a5c9
            ".vary" sera créé pour l'URL en question. Ce répertoire contiendra de
      Packit 90a5c9
            multiples fichiers ".data" correspondant aux différents contenus
      Packit 90a5c9
            négociés.

      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Maintenance du cache sur disque

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le module mod_cache_disk n'effectue aucune

      Packit 90a5c9
            régulation de l'espace disque utilisé par le cache, mais s'il
      Packit 90a5c9
            s'arrête en douceur en cas d'erreur disque et se comporte alors
      Packit 90a5c9
            comme si le cache n'avait jamais existé.

      Packit 90a5c9
      Packit 90a5c9
            

      Par contre l'utilitaire

      Packit 90a5c9
            htcacheclean fourni avec
      Packit 90a5c9
            httpd
      Packit 90a5c9
            vous permet de nettoyer le cache périodiquement.
      Packit 90a5c9
            Déterminer la fréquence à laquelle lancer htcacheclean et la taille souhaitée
      Packit 90a5c9
            pour le cache est une tâche relativement complexe et il vous faudra de
      Packit 90a5c9
            nombreux essais et erreurs pour arriver à sélectionner des valeurs
      Packit 90a5c9
            optimales.

      Packit 90a5c9
      Packit 90a5c9
            

      htcacheclean opère selon deux

      Packit 90a5c9
            modes. Il peut s'exécuter comme démon résident, ou être lancé
      Packit 90a5c9
            périodiquement par cron. htcacheclean peut mettre une heure
      Packit 90a5c9
            ou plus pour traiter de très grands caches (plusieurs dizaines de
      Packit 90a5c9
            Gigaoctets) et si vous l'exécutez à partir de cron, il vous est
      Packit 90a5c9
            conseillé de déterminer la durée typique d'un traitement, afin d'éviter
      Packit 90a5c9
            d'exécuter plusieurs instances à la fois.

      Packit 90a5c9
      Packit 90a5c9
            

      Il est aussi conseillé d'attribuer un niveau de priorité "nice"

      Packit 90a5c9
            approprié à htcacheclean de façon à ce qu'il n'effectue pas trop
      Packit 90a5c9
            d'accès disque pendant le fonctionnement du serveur.

      Packit 90a5c9
      Packit 90a5c9
            

      Packit 90a5c9
            
      Packit 90a5c9
            <dfn>Figure 1</dfn>: Croissance
      Packit 90a5c9
            typique du cache / séquence de nettoyage.

      Packit 90a5c9
      Packit 90a5c9
            

      Comme mod_cache_disk ne tient pas compte de l'espace

      Packit 90a5c9
            utilisé dans le cache, vous devez vous assurer que
      Packit 90a5c9
            htcacheclean est configuré de
      Packit 90a5c9
            façon à laisser suffisamment d'"espace de croissance"
      Packit 90a5c9
            à la suite d'un nettoyage.

      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Cache en mémoire

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      En utilisant le module mod_cache_socache,

      Packit 90a5c9
            mod_cache peut mettre en cache des données à partir de
      Packit 90a5c9
            diverses implémentations aussi nommées "fournisseurs". Par exemple, en
      Packit 90a5c9
            utilisant le module mod_socache_memcache, on peut
      Packit 90a5c9
            spécifier que c'est memcached qui doit
      Packit 90a5c9
            être utilisé comme mécanisme de stockage sous-jacent.

      Packit 90a5c9
      Packit 90a5c9
            

      Typiquement, le module sera configuré comme suit :

      Packit 90a5c9
      Packit 90a5c9
            
      CacheEnable socache /
      Packit 90a5c9
      CacheSocache memcache:memcd.example.com:11211
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
            

      En outre, il est possible de spécifier plusieurs serveurs

      Packit 90a5c9
            memcached en les ajoutant à la fin de la ligne
      Packit 90a5c9
            CacheSocache memcache: et en les séparant par des virgules :

      Packit 90a5c9
      Packit 90a5c9
            
      CacheEnable socache /
      Packit 90a5c9
      CacheSocache memcache:mem1.example.com:11211,mem2.example.com:11212
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
            

      Divers autres fournisseurs mod_cache_socache utilisent

      Packit 90a5c9
            aussi ce format. Par exemple :

      Packit 90a5c9
      Packit 90a5c9
            
      CacheEnable socache /
      Packit 90a5c9
      CacheSocache shmcb:/path/to/datafile(512000)
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
            
      CacheEnable socache /
      Packit 90a5c9
      CacheSocache dbm:/path/to/datafile
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
        
      top
      Packit 90a5c9
      Packit 90a5c9

      Mise en cache générale d'objets partagés à deux états de forme

      Packit 90a5c9
          clé/valeur
      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
          
      Packit 90a5c9
          

      Le serveur HTTP Apache fournit un cache d'objets partagés de bas

      Packit 90a5c9
          niveau pour la mise en cache d'informations comme les sessions SSL
      Packit 90a5c9
          ou les données d'authentification dans l'interface socache.

      Packit 90a5c9
      Packit 90a5c9
          

      Pour chaque implémentation un module supplémentaire est fourni

      Packit 90a5c9
          qui offre les services d'arrière-plan suivants :

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
          
      mod_socache_dbm
      Packit 90a5c9
          
      Cache d'objets partagés basé sur DBM.
      Packit 90a5c9
          
      mod_socache_dc
      Packit 90a5c9
          
      Cache d'objets partagés basé sur Distcache.
      Packit 90a5c9
          
      mod_socache_memcache
      Packit 90a5c9
          
      Cache d'objets partagés basé sur Memcache.
      Packit 90a5c9
          
      mod_socache_shmcb
      Packit 90a5c9
          
      Cache d'objets partagés basé sur la mémoire partagée.
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Mise en cache des données d'authentification

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le module mod_authn_socache permet la mise en

      Packit 90a5c9
            cache des données issues d'une authentification, diminuant ainsi
      Packit 90a5c9
            la charge des serveurs d'authentification d'arrière-plan.

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Mise en cache des sessions SSL

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le module mod_ssl utilise l'interface

      Packit 90a5c9
            socache pour fournir un cache de session et un cache
      Packit 90a5c9
            de base.

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
        
      top
      Packit 90a5c9
      Packit 90a5c9

      Mise en cache à base de fichiers spécialisés

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Sur les plateformes où le système de fichiers peut être lent, ou

      Packit 90a5c9
          lorsque les descripteurs de fichiers sont gourmands en ressources,
      Packit 90a5c9
          il est possible de précharger des fichiers en mémoire au démarrage
      Packit 90a5c9
          du serveur.

      Packit 90a5c9
      Packit 90a5c9
          

      Sur les systèmes où l'ouverture des fichiers est lente, il est

      Packit 90a5c9
          possible d'ouvrir le fichier au démarrage du serveur et de mettre en
      Packit 90a5c9
          cache le descripteur de fichier. Ces options peuvent vous aider sur
      Packit 90a5c9
          les systèmes où l'accès aux fichiers statiques est lent.

      Packit 90a5c9
      Packit 90a5c9
          

      Mise en cache des descripteurs de fichier

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le processus d'ouverture d'un fichier peut être en soi une

      Packit 90a5c9
            source de ralentissement, en particulier sur les systèmes de
      Packit 90a5c9
            fichiers sur le réseau. httpd permet d'éviter ce ralentissement en
      Packit 90a5c9
            maintenant un cache des descripteurs de fichiers ouverts pour les
      Packit 90a5c9
            fichiers souvent servis. Actuellement, httpd fournit une seule
      Packit 90a5c9
            implémentation de mise en cache des descripteurs de fichiers.

      Packit 90a5c9
      Packit 90a5c9
            

      CacheFile

      Packit 90a5c9
              
      Packit 90a5c9
      Packit 90a5c9
              

      La forme la plus basique de mise en cache que propose httpd

      Packit 90a5c9
      	est la mise en cache des descripteurs de fichiers fournie par le
      Packit 90a5c9
      	module mod_file_cache. Plutôt que de mettre en
      Packit 90a5c9
      	cache le contenu des fichiers, ce cache maintient une table des
      Packit 90a5c9
      	descripteurs de fichiers ouverts. Les fichiers devant faire
      Packit 90a5c9
      	l'objet d'une mise en cache de ce type sont spécifiés dans le
      Packit 90a5c9
      	fichier de configuration via la directive CacheFile.

      Packit 90a5c9
      Packit 90a5c9
              

      La directive CacheFile informe httpd

      Packit 90a5c9
      	qu'il doit ouvrir le fichier lors de son démarrage et qu'il doit
      Packit 90a5c9
      	réutiliser le descripteur de fichier mis en cache pour tous les
      Packit 90a5c9
      	accès futurs à ce fichier.

      Packit 90a5c9
      Packit 90a5c9
              
      CacheFile /usr/local/apache2/htdocs/index.html
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
              

      Si vous désirez mettre en cache un grand nombre de fichiers

      Packit 90a5c9
      	de cette manière, vous devez vous assurer que le nombre maximal
      Packit 90a5c9
      	de fichiers ouverts pour votre système d'exploitation est défini
      Packit 90a5c9
      	à une valeur suffisante.

      Packit 90a5c9
      Packit 90a5c9
              

      Bien que l'utilisation de la directive CacheFile n'entraîne pas de

      Packit 90a5c9
      	mise en cache du contenu du fichier proprement dit, elle
      Packit 90a5c9
      	implique que si le fichier est modifié pendant l'exécution du
      Packit 90a5c9
      	serveur, ces modifications ne seront pas prises en compte. Le
      Packit 90a5c9
      	fichier sera toujours servi dans l'état où il se trouvait au
      Packit 90a5c9
      	moment du démarrage du serveur.

      Packit 90a5c9
      Packit 90a5c9
              

      Si le fichier est supprimé pendant l'exécution du serveur, ce

      Packit 90a5c9
      	dernier conservera le descripteur de fichier ouvert associé et
      Packit 90a5c9
      	servira le fichier dans l'état où il se trouvait au
      Packit 90a5c9
      	moment du démarrage du serveur. Cela signifie aussi que même si
      Packit 90a5c9
      	le fichier a été supprimé, et n'apparaît donc plus dans le
      Packit 90a5c9
      	système de fichiers, l'espace disque libéré ne sera disponible
      Packit 90a5c9
      	qu'une fois le serveur httpd arrêté et donc le descripteur de
      Packit 90a5c9
      	fichier fermé.

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      In-Memory Caching

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
          

      Servir un contenu directement depuis la mémoire système est

      Packit 90a5c9
          universellement reconnu comme la méthode la plus rapide. Lire des fichiers
      Packit 90a5c9
          depuis un contrôleur de disque ou pire, depuis un réseau distant est plus
      Packit 90a5c9
          lent de plusieurs ordres de grandeur. Les contrôleurs de disque réalisent
      Packit 90a5c9
          en général des opérations mécaniques, et l'accès au réseau est limité par la
      Packit 90a5c9
          bande passante dont vous disposez. Par contre, les temps d'accès à la
      Packit 90a5c9
          mémoire sont de l'ordre de la nano-seconde.

      Packit 90a5c9
      Packit 90a5c9
          

      Cependant la mémoire système n'est pas bon marché; à capacité égale,

      Packit 90a5c9
          c'est de loin le type de stockage le plus coûteux et il est important de
      Packit 90a5c9
          s'assurer qu'elle est utilisée efficacement. Le fait de mettre en cache
      Packit 90a5c9
          des fichiers en mémoire diminue d'autant la quantité de mémoire système
      Packit 90a5c9
          disponible. Comme nous le verrons plus loin, ce n'est pas un problème en
      Packit 90a5c9
          soi dans le cas de la mise en cache par l'intermédiaire du système
      Packit 90a5c9
          d'exploitation, mais si l'on utilise la mise en cache en mémoire propre à
      Packit 90a5c9
          httpd, il faut prendre garde à ne pas allouer trop de mémoire au cache.
      Packit 90a5c9
          Sinon le système sera contraint d'utiliser le swap, ce qui dégradera
      Packit 90a5c9
          sensiblement les performances.

      Packit 90a5c9
      Packit 90a5c9
            

      Mise en cache par l'intermédiaire du système d'exploitation

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Dans la plupart des systèmes d'exploitation modernes, c'est le noyau

      Packit 90a5c9
            qui gère directement la mise en cache en mémoire des données relatives
      Packit 90a5c9
            aux fichiers. C'est une fonctionnalité puissante, et les systèmes
      Packit 90a5c9
            d'exploitation s'en acquittent fort bien pour la plus grande partie.
      Packit 90a5c9
            Considérons par exemple, dans le cas de Linux, la différence entre le
      Packit 90a5c9
            temps nécessaire à la première lecture d'un fichier et le temps
      Packit 90a5c9
            nécessaire à sa deuxième lecture;

      Packit 90a5c9
      Packit 90a5c9
              
      colm@coroebus:~$ time cat testfile > /dev/null
      Packit 90a5c9
      real    0m0.065s
      Packit 90a5c9
      user    0m0.000s
      Packit 90a5c9
      sys     0m0.001s
      Packit 90a5c9
      colm@coroebus:~$ time cat testfile > /dev/null
      Packit 90a5c9
      real    0m0.003s
      Packit 90a5c9
      user    0m0.003s
      Packit 90a5c9
      sys     0m0.000s
      Packit 90a5c9
      Packit 90a5c9
            

      Même pour ce petit fichier, il y a une grande différence entre les

      Packit 90a5c9
            temps nécessaires pour lire le fichier. Ceci est du au fait que le
      Packit 90a5c9
            noyau a mis en cache le contenu du fichier en mémoire.

      Packit 90a5c9
      Packit 90a5c9
            

      Du fait de toujours pouvoir disposer de mémoire système, vous pouvez

      Packit 90a5c9
            être assuré qu'il y aura de plus en plus de contenus de fichiers stockés
      Packit 90a5c9
            dans ce cache. Ceci peut s'avérer une méthode de mise en cache en mémoire
      Packit 90a5c9
            très efficace, et ne nécessite aucune configuration supplémentaire
      Packit 90a5c9
            de httpd.

      Packit 90a5c9
      Packit 90a5c9
            

      De plus, comme le système d'exploitation sait si des fichiers

      Packit 90a5c9
            ont été
      Packit 90a5c9
            supprimés ou modifiés, il peut effacer automatiquement des contenus de
      Packit 90a5c9
            fichiers du cache lorsque cela s'avère nécessaire. Ceci constitue un gros
      Packit 90a5c9
            avantage par rapport à la mise en cache en mémoire
      Packit 90a5c9
            de httpd qui n'a
      Packit 90a5c9
            aucune possibilité de savoir si un fichier a été modifié.

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
          

      En dépit des performances et des avantages de la mise en cache

      Packit 90a5c9
          automatique par le système d'exploitation, la mise en cache en mémoire
      Packit 90a5c9
          peut être effectuée plus efficacement par httpd dans certaines
      Packit 90a5c9
          circonstances.

      Packit 90a5c9
      Packit 90a5c9
          

      Mise en cache à l'aide de la directive MMapFile

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      La directive MMapFile

      Packit 90a5c9
            fournie par le module mod_file_cache vous permet de
      Packit 90a5c9
            demander à httpd de charger un contenu de fichier statique en mémoire
      Packit 90a5c9
            lors de son démarrage (à l'aide de l'appel
      Packit 90a5c9
            système mmap). httpd
      Packit 90a5c9
            utilisera le contenu chargé en mémoire pour satisfaire ultérieurement
      Packit 90a5c9
            toutes les demandes d'accès à ce fichier.

      Packit 90a5c9
      Packit 90a5c9
              
      MMapFile /usr/local/apache2/htdocs/index.html
      Packit 90a5c9
      Packit 90a5c9
      Packit 90a5c9
            

      Comme dans le cas de la directive

      Packit 90a5c9
            CacheFile, toute
      Packit 90a5c9
            modification du fichier ne sera plus prise en compte par httpd une fois
      Packit 90a5c9
            ce dernier démarré.

      Packit 90a5c9
      Packit 90a5c9
            

      La directive

      Packit 90a5c9
            MMapFile ne gardant
      Packit 90a5c9
            pas la trace de la quantité de mémoire qu'elle alloue, vous devez prendre
      Packit 90a5c9
            garde de ne pas en abuser. Chaque processus enfant de httpd utilisant
      Packit 90a5c9
            sa propre réplique de la mémoire allouée, il est donc d'une importance
      Packit 90a5c9
            critique de s'assurer que les fichiers chargés ne sont pas d'une taille
      Packit 90a5c9
            trop importante afin d'épargner au système l'utilisation du swap.

      Packit 90a5c9
            
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
        
      top
      Packit 90a5c9
      Packit 90a5c9

      Considérations sur la sécurité

      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Autorisation et contrôle d'accès

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Utiliser mod_cache revient sensiblement à la même

      Packit 90a5c9
            chose qu'avoir un mandataire inverse intégré (reverse-proxy). Les requêtes
      Packit 90a5c9
            seront servies par le module de mise en cache sauf si ce dernier
      Packit 90a5c9
            détermine qu'un processus d'arrière-plan doit être appelé. La mise en
      Packit 90a5c9
            cache de ressources locales modifie considérablement le modèle de
      Packit 90a5c9
            sécurité de httpd.

      Packit 90a5c9
      Packit 90a5c9
            

      Comme le parcours de la hiérarchie d'un système de fichiers pour

      Packit 90a5c9
            examiner le contenu d'éventuels fichiers
      Packit 90a5c9
            .htaccess serait une opération très coûteuse en ressources,
      Packit 90a5c9
            annulant partiellement de ce fait l'intérêt de la mise en cache
      Packit 90a5c9
            (accélérer le traitement des requêtes),
      Packit 90a5c9
            mod_cache ne se préoccupe pas de savoir s'il a
      Packit 90a5c9
            l'autorisation de servir une entité mise en cache. En d'autres termes,
      Packit 90a5c9
            si mod_cache a mis en cache un certain contenu, ce
      Packit 90a5c9
            dernier sera servi à partir du cache tant qu'il ne sera pas arrivé à
      Packit 90a5c9
            expiration.

      Packit 90a5c9
      Packit 90a5c9
            

      Si par exemple, votre configuration autorise l'accès à une ressource

      Packit 90a5c9
            en fonction de l'adresse IP, vous devez vous assurer que ce contenu n'est
      Packit 90a5c9
            pas mis en cache. Ceci est possible en utilisant la directive
      Packit 90a5c9
            CacheDisable, ou le module
      Packit 90a5c9
            mod_expires. Livré à lui-même,
      Packit 90a5c9
            mod_cache - pratiquement comme un mandataire inverse -
      Packit 90a5c9
            mettrait en cache le contenu lors de son service, et le servirait ensuite
      Packit 90a5c9
            à tout client, vers n'importe quelle adresse IP.

      Packit 90a5c9
      Packit 90a5c9
            

      Lorsque la directive CacheQuickHandler est définie à

      Packit 90a5c9
            Off, toutes les phases du traitement de la requête
      Packit 90a5c9
            sont exécutées et le modèle de sécurité reste le même.

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Piratages locaux

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Etant donné que les requêtes des utilisateurs finaux peuvent être

      Packit 90a5c9
            servies depuis le cache, ce dernier est une cible potentielle pour ceux
      Packit 90a5c9
            qui veulent défigurer un contenu ou interférer avec lui. Il est important
      Packit 90a5c9
            de garder à l'esprit que l'utilisateur sous lequel tourne
      Packit 90a5c9
            httpd doit
      Packit 90a5c9
            toujours avoir l'accès en écriture dans le cache. Ceci est en contraste
      Packit 90a5c9
            total avec la recommandation usuelle d'interdire à l'utilisateur sous
      Packit 90a5c9
            lequel tourne Apache
      Packit 90a5c9
            l'accès en écriture à tout contenu.

      Packit 90a5c9
      Packit 90a5c9
            

      Si l'utilisateur sous lequel tourne Apache est compromis,

      Packit 90a5c9
            par exemple à cause d'une
      Packit 90a5c9
            faille de sécurité dans un processus CGI, il est possible que le cache
      Packit 90a5c9
            fasse l'objet d'une attaque. Il est relativement aisé d'insérer ou de
      Packit 90a5c9
            modifier une entité dans le cache en utilisant le module
      Packit 90a5c9
            mod_cache_disk.

      Packit 90a5c9
      Packit 90a5c9
            

      Cela représente un risque relativement élévé par rapport aux autres

      Packit 90a5c9
            types d'attaques qu'il est possible de mener sous l'utilisateur apache.
      Packit 90a5c9
            Si vous utilisez mod_cache_disk, vous devez garder ceci
      Packit 90a5c9
            à l'esprit : effectuez toujours les mises à jour de
      Packit 90a5c9
            httpdquand des
      Packit 90a5c9
            correctifs de sécurité sont annoncés et exécutez les processus CGI sous
      Packit 90a5c9
            un utilisateur autre qu'apache en utilisant
      Packit 90a5c9
            suEXEC dans la mesure du possible.

      Packit 90a5c9
      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Empoisonnement du cache (Cache Poisoning)

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Si vous utilisez httpd comme serveur mandataire avec mise en cache,

      Packit 90a5c9
            vous vous exposez aussi à un éventuel "Empoisonnement du
      Packit 90a5c9
            cache" (Cache poisoning). L'empoisonnement du cache est un terme général
      Packit 90a5c9
            pour désigner les attaques au cours desquelles l'attaquant fait en sorte
      Packit 90a5c9
            que le serveur mandataire renvoie à un contenu incorrect (et souvent
      Packit 90a5c9
            indésirable) suite à en provenance du serveur d'arrière-plan.
      Packit 90a5c9
            

      Packit 90a5c9
      Packit 90a5c9
            

      Par exemple, si les serveur DNS qu'utilise votre système où tourne

      Packit 90a5c9
            httpd sont vulnérables à l'empoisonnement du cache des DNS, un attaquant
      Packit 90a5c9
            pourra contrôler vers où httpd se connecte lorsqu'il demande un contenu
      Packit 90a5c9
            depuis le serveur d'origine.
      Packit 90a5c9
            Un autre exemple est constitué par les attaques ainsi nommées
      Packit 90a5c9
            "Dissimulation de requêtes HTTP" (HTTP request-smuggling).

      Packit 90a5c9
      Packit 90a5c9
            

      Ce document n'est pas le bon endroit pour une discussion approfondie

      Packit 90a5c9
            à propos de la Dissimulation de requêtes HTTP (utilisez plutôt votre
      Packit 90a5c9
            moteur de recherche favori); il est cependant important de savoir qu'il
      Packit 90a5c9
            est possible d'élaborer une série de requêtes, et d'exploiter une
      Packit 90a5c9
            vulnérabilité d'un serveur web d'origine de telle façon que l'attaquant
      Packit 90a5c9
            puisse contrôler entièrement le contenu renvoyé par le mandataire.

      Packit 90a5c9
          
      Packit 90a5c9
      Packit 90a5c9
          

      Déni de Service / Cachebusting

      Packit 90a5c9
            
      Packit 90a5c9
      Packit 90a5c9
            

      Le mécanisme utilisé via l'en-tête Vary permet de mettre en

      Packit 90a5c9
            cache simultanément plusieurs variantes d'une ressource avec la
      Packit 90a5c9
            même URL. Le cache sélectionne la variante correcte à envoyer au
      Packit 90a5c9
            client en fonction des valeurs d'en-tête fournies par ce dernier.
      Packit 90a5c9
            Ce mécanisme peut devenir un problème lorsqu'on tente d'appliquer
      Packit 90a5c9
            le mécanisme des variantes à un en-tête connu pour pouvoir
      Packit 90a5c9
            posséder un grand nombre de valeurs
      Packit 90a5c9
            possibles en utilisation normal, comme par exemple l'en-tête
      Packit 90a5c9
            User-Agent. En fonction de la popularité du site web,
      Packit 90a5c9
            des milliers ou même des millions d'entrées de cache dupliquées
      Packit 90a5c9
            peuvent être créées pour la même URL, submergeant les autres
      Packit 90a5c9
            entrées du cache.

      Packit 90a5c9
            
      Packit 90a5c9
            

      Dans d'autres cas, il peut être nécessaire de modifier l'URL

      Packit 90a5c9
            d'une ressource particulière à chaque requête, en général en lui
      Packit 90a5c9
            ajoutant une chaîne "cachebuster". Si ce contenu est déclaré comme
      Packit 90a5c9
            pouvant être mis en cache par un serveur avec une durée de
      Packit 90a5c9
            fraîcheur significative, ces entrées peuvent submerger les entrées
      Packit 90a5c9
            légitimes du cache. Alors que mod_cache fournit
      Packit 90a5c9
            une directive CacheIgnoreURLSessionIdentifiers,
      Packit 90a5c9
            cette dernière doit être utilisée avec prudence pour s'assurer que
      Packit 90a5c9
            les caches du navigateur ou du mandataire le plus proche
      Packit 90a5c9
            (downstream proxy) ne sont pas victimes du même problème de Déni de
      Packit 90a5c9
            service.

      Packit 90a5c9
          
      Packit 90a5c9
        
      Packit 90a5c9
      Packit 90a5c9

      Langues Disponibles:  en  |

      Packit 90a5c9
       fr  |
      Packit 90a5c9
       tr 

      Packit 90a5c9
      top

      Commentaires

      Notice:
      This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.
      Packit 90a5c9
      <script type="text/javascript">
      Packit 90a5c9
      var comments_shortname = 'httpd';
      Packit 90a5c9
      var comments_identifier = 'http://httpd.apache.org/docs/2.4/caching.html';
      Packit 90a5c9
      (function(w, d) {
      Packit 90a5c9
          if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
      Packit 90a5c9
              d.write('
      <\/div>');
      Packit 90a5c9
              var s = d.createElement('script');
      Packit 90a5c9
              s.type = 'text/javascript';
      Packit 90a5c9
              s.async = true;
      Packit 90a5c9
              s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
      Packit 90a5c9
              (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
      Packit 90a5c9
          }
      Packit 90a5c9
          else { 
      Packit 90a5c9
              d.write('
      Comments are disabled for this page at the moment.<\/div>');
      Packit 90a5c9
          }
      Packit 90a5c9
      })(window, document);
      Packit 90a5c9
      //--></script>
      Packit 90a5c9

      Copyright 2018 The Apache Software Foundation.
      Autorisé sous Apache License, Version 2.0.

      Packit 90a5c9

      Modules | Directives | FAQ | Glossaire | Plan du site

      <script type="text/javascript">
      Packit 90a5c9
      if (typeof(prettyPrint) !== 'undefined') {
      Packit 90a5c9
          prettyPrint();
      Packit 90a5c9
      }
      Packit 90a5c9
      //--></script>
      Packit 90a5c9
      </body></html>