Les contenus sont stockés dans le cache et extraits de ce dernier en utilisant une clé à base d'URI. Un contenu dont l'accès est protégé ne sera pas mis en cache.
Pour de plus amples détails, une description, et des exemples, reportez-vous au Guide de la mise en cache.
Lorsqu'une entrée du cache est périmée,
Un court mais non négligeable laps de temps existe entre le moment où l'entrée du cache est périmée, et le moment où elle est mise à jour. Sur un serveur fortement chargé, un certain nombre de requêtes peut arriver pendant ce laps de temps, et provoquer une tempête de requêtes susceptibles de saturer le processus d'arrière-plan de manière soudaine et imprédictible.
Pour contenir cette tempête, on peut utiliser la directive
Lorsqu'une entité est mise en cache pour la première fois, un verrou est créé pour cette entité jusqu'à ce que la réponse ait été entièrement mise en cache. Pendant la durée de vie du verrou, le cache va empêcher une seconde tentative de mise en cache de la même entité. Bien que cela ne suffise pas à contenir la tempête de requêtes, toute tentative de mettre en cache la même entité plusieurs fois simultanément est stoppée.
Lorsqu'une entrée atteint la limite de sa durée de vie, et devient par conséquent périmée, un verrou est créé pour cette entité jusqu'à ce que la réponse ait été soit confirmée comme encore valide, soit remplacée par le processus d'arrière-plan. Pendant la durée de vie du verrou, une seconde requête entrante va provoquer le renvoi de la donnée périmée, et la tempête de requêtes sera contenue.
Les verrous ne sont utilisés qu'à titre indicatif pour enjoindre le cache à être plus coopératif avec les serveurs d'arrière-plan, et il est possible de passer outre si nécessaire. Si le client envoie une requête contenant un en-tête Cache-Control imposant un nouveau téléchargement de l'entité, tout verrou éventuel sera ignoré, la requête du client sera honorée immédiatement, et l'entrée du cache mise à jour.
Comme mécanisme de sécurité supplémentaire, la durée de vie
maximale des verrous est configurable. Lorsque cette limite est
atteinte, le verrou est supprimé et une autre requête peut alors en
créer un nouveau. Cette durée de vie peut être définie via la
directive
Dans son mode de fonctionnement par défaut, le cache s'exécute sous la forme d'un gestionnaire rapide, court-circuitant la majorité des traitements du serveur et fournissant ainsi une mise en cache possédant les plus hautes performances disponibles.
Dans ce mode, le cache s'incruste devant le serveur, comme si un mandataire de mise en cache indépendant RFC2616 était placé devant ce dernier.
Bien que que ce mode offre les meilleures performances, les administrateurs peuvent souhaiter, dans certaines circonstances, effectuer des traitements sur la requête après que cette dernière ait été mise en cache, comme ajouter du contenu personnalisé à la page mise en cache, ou appliquer des restrictions d'autorisations au contenu. Pour y parvenir, l'administrateur sera alors souvent forcé de placer des serveurs mandataires inverses indépendants soit derrière, soit devant le serveur de mise en cache.
Pour résoudre ce problème, la directive
En outre, l'administrateur peut éventuellement spécifier le point précis dans la chaîne de filtrage où devra intervenir la mise en cache en ajoutant le filtre CACHE à la chaîne de filtrage en sortie.
Par exemple, pour mettre en cache le contenu avant d'appliquer une compression à la réponse, placez le filtre CACHE avant le filtre DEFLATE comme dans l'exemple suivant :
Une autre possibilité consiste à mettre en cache le contenu avant
l'ajout de contenu personnalisé via
Vous pouvez insérer le filtre CACHE en tout point
de la chaîne de filtrage. Dans l'exemple suivant, le contenu est mis
en cache après avoir été interprété par
La directive disk
,
Si les différentes directives
En fonctionnement du type serveur mandataire direct, chaîne URL peut aussi être utilisé pour spécifier des sites distants et des protocoles de mandat pour lesquels la mise en cache devra être activée.
Un nom d'hôte commençant par un caractère "*" correspondra à tout nom d'hôte se terminant par le suffixe considéré. Un nom d'hôte commençant par un caractère "." correspondra à tout nom d'hôte contenant le composant de nom de domaine qui suit ce caractère.
Depuis la version 2.2.12, on peut définir la variable
d'environnement no-cache
pour une définition plus fine
des ressources à mettre en cache.
La directive
Si la directive se trouve à l'intérieur d'une section
Avec les versions 2.2.12 et ultérieures, on peut définir la
variable d'environnement no-cache
pour une définition
plus fine des ressources à mettre en cache.
La directive
La directive
La directive
Normalement, les documents qui ne possèdent pas de date de
dernière modification ne sont pas mis en cache. Dans certaines
circonstances, la date de dernière modification est supprimée (au
cours des traitements liés à
Normalement, les requêtes contenant des en-têtes tels que
Cache-Control: no-cache ou Pragma: no-cache ne sont pas servies
depuis le cache. La directive
Normalement, les requêtes comportant une chaîne de paramètres
sont mises en cache séparément si leurs chaînes de paramètres
diffèrent.
En accord avec la RFC 2616/13.9, cette mise en cache n'est effectuée
séparément que si une date d'expiration est spécifiée. La directive
Si un document ne possède pas de date d'expiration, elle peut
être calculée en fonction de la date de dernière modification, si
elle existe. La directive
délai-expiration = durée-depuis-date-dernière-modification *
facteur
date-expiration = date-courante + délai-expiration
Par exemple, si la dernière modification du document date de 10
heures, et si facteur a pour valeur 0.1, le délai
d'expiration sera de 10*0.1 = 1 heure. Si l'heure courante est
3:00pm, la date d'expiration calculée sera 3:00pm + 1 heure =
4:00pm.
Si le délai d'expiration est supérieur à celui spécifié par la
directive
En accord avec la RFC 2616, les en-têtes HTTP hop-by-hop ne sont
pas stockés dans le cache. Les en-têtes HTTP suivant sont des
en-têtes hop-by-hop, et en tant que tels, ne sont en aucun
cas stockés dans le cache, quelle que soit la définition de la
directive
Connection
Keep-Alive
Proxy-Authenticate
Proxy-Authorization
TE
Trailers
Transfer-Encoding
Upgrade
La directive
La directive None
.
Expires
, ne sont pas stockés suite à la définition
d'une directive Certaines applications encodent l'identifiant de session dans l'URL comme dans l'exemple suivant :
/une-application/image.gif;jsessionid=123456789
/une-application/image.gif?PHPSESSIONID=12345678
Ceci implique la mise en cache des ressources séparément pour
chaque session, ce qui n'est en général pas souhaité. La directive
CacheIgnoreURLSessionIdentifiers None
vide la liste
des identifiants ignorés. Autrement, chaque identifiant spécifié est
ajouté à la liste.
Normalement, les réponse comportant un en-tête Cache-Control:
dont la valeur est private ne seront pas stockées dans le cache. La
directive
Normalement, les requêtes ou réponses dont l'en-tête
Cache-Control: a pour valeur no-store ne sont pas stockées dans le
cache. La directive
La directive
La configuration minimale pour activer le verrouillage contre les tempêtes de requêtes dans le répertoire temp par défaut du système est la suivante :
La directive
La directive
Un verrou plus ancien que cette valeur exprimée en secondes sera ignoré, et la prochaine requête entrante sera alors en mesure de recréer le verrou. Ce mécanisme permet d'éviter les mises à jour trop longues initiées par des clients lents.
La directive
Avec la configuration par défaut, le cache agit au cours de la phase du gestionnaire rapide. Cette phase court-circuite la majorité des traitements du serveur, et constitue le mode d'opération le plus performant pour un serveur typique. Le cache s'incruste devant le serveur, et la majorité des traitements du serveur est court-circuitée.
Lorsque cette directive est définie à off, le cache agit comme un gestionnaire normal, et est concerné par toutes les phases de traitement d'une requête. Bien que ce mode soit moins performant que le mode par défaut, il permet d'utiliser le cache dans les cas où un traitement complet de la requête est nécessaire, comme par exemple lorsque le contenu est soumis à autorisation.
Lorsque le gestionnaire rapide est désactivé, l'administrateur a aussi la possibilité de choisir avec précision le point de la chaîne de filtrage où la mise en cache sera effectuée, en utilisant le filtre CACHE.
Si le filtre CACHE est spécifié plusieurs fois, c'est la dernière instance qui sera prise en compte.