blob: e87960d53b848e9195d2c34286227044d68b4ab3 [file]
<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="fr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>mod_cache_disk - Serveur HTTP Apache Version 2.5</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet">
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size">
<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">
<script src="../style/scripts/prettify.min.js">
</script>
<link href="../images/favicon.png" rel="shortcut icon"></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p>
<p class="apache">Serveur HTTP Apache Version 2.5</p>
<img alt="" src="../images/feather.png"></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div>
<div id="path">
<a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="https://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_cache_disk</h1>
<button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_cache_disk.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_cache_disk.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_cache_disk.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_cache_disk.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Module de stockage sur disque pour le filtre de mise en
cache HTTP.</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur&nbsp;de&nbsp;Module:</a></th><td>cache_disk_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier&nbsp;Source:</a></th><td>mod_cache_disk.c</td></tr></table>
<h3>Sommaire</h3>
<p><code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code> impl&eacute;mente un gestionnaire de
stockage sur disque pour le module <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
<p>Les en-t&ecirc;tes et corps des r&eacute;ponses mises en cache sont stock&eacute;s
s&eacute;par&eacute;ment sur le disque, dans une structure de r&eacute;pertoires bas&eacute;e
sur le condens&eacute; md5 de l'URL mise en cache.</p>
<p>Plusieurs r&eacute;ponses au contenu n&eacute;goci&eacute; peuvent &ecirc;tre stock&eacute;es en
m&ecirc;me temps, mais la mise en cache de contenus partiels n'est pas
support&eacute;e actuellement par ce module.</p>
<p>Les mises &agrave; jour atomiques du cache pour les fichiers d'en-t&ecirc;te
et de corps peuvent &ecirc;tre effectu&eacute;es sans verrouillage en
enregistrant les num&eacute;ros d'inode et de p&eacute;riph&eacute;rique du fichier de
corps dans le fichier d'en-t&ecirc;te. Ceci implique que les entr&eacute;es du
cache d&eacute;plac&eacute;es manuellement dans le cache seront ignor&eacute;es.</p>
<p>L'utilitaire <code class="program"><a href="../programs/htcacheclean.html">htcacheclean</a></code> permet de lister et
de supprimer les URLs du cache, ou de maintenir le cache en de&ccedil;&agrave; de
certaines limites de taille et/ou de nombre d'inodes. L'utilitaire
peut &ecirc;tre ex&eacute;cut&eacute; &agrave; la demande, ou automatiquement pour assurer un
contr&ocirc;le continu des tailles des r&eacute;pertoires.</p>
<div class="note"><h3>Note :</h3>
<p><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> doit &ecirc;tre charg&eacute; avant
<code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code> pour que ce dernier puisse
fonctionner.</p>
</div>
<div class="note"><h3>Note :</h3>
<p>Lorsque la plate-forme la supporte, et si elle est activ&eacute;e via la
directive <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code>,
<code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code> utilise la fonctionnalit&eacute; sendfile
pour servir les fichiers &agrave; partir du cache. Cependant,
<code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code> ignore la configuration de la
directive <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code> dans
un contexte de r&eacute;pertoire ou de fichier .htaccess, car le module ne
dispose pas des d&eacute;finitions correspondantes lorsque la requ&ecirc;te est
servie depuis le cache.</p>
</div>
</div>
<div id="quickview"><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif"> <a href="#cachedirlength">CacheDirLength</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cachedirlevels">CacheDirLevels</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cachemaxfilesize">CacheMaxFileSize</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cacheminfilesize">CacheMinFileSize</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cachereadsize">CacheReadSize</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cachereadtime">CacheReadTime</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cacheroot">CacheRoot</a></li>
</ul>
<h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_cache_disk">Probl&egrave;mes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_cache_disk">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li>
<li><code class="module"><a href="../mod/mod_cache_socache.html">mod_cache_socache</a></code></li>
<li><a href="../caching.html">Guide de la mise en cache</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cachedirlength">Directive <span id="CacheDirLength">CacheDirLength</span> <a title="Lien permanent" href="#cachedirlength" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nombre de caract&egrave;res des noms des
sous-r&eacute;pertoires</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheDirLength <var>longueur</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>CacheDirLength 2</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>la directive <code class="directive">CacheDirLength</code> permet de
d&eacute;finir le nombre de caract&egrave;res que comportera chaque nom de
sous-r&eacute;pertoire de la hi&eacute;rarchie du cache. On peut l'utiliser en
conjonction avec <code class="directive">CacheDirLevels</code> pour
d&eacute;terminer une structure approximative de la hi&eacute;rarchie de
cache.</p>
<p>Une valeur haute pour <code class="directive">CacheDirLength</code>
combin&eacute;e avec une valeur basse pour
<code class="directive">CacheDirLevels</code> g&eacute;n&eacute;rera une hi&eacute;rarchie
relativement peu profonde, avec un grand nombre de sous-r&eacute;pertoires
&agrave; chaque niveau.</p>
<div class="note">
<p>La valeur du produit <code class="directive">CacheDirLevels</code> *
<code class="directive">CacheDirLength</code> ne
doit pas d&eacute;passer 20.</p>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cachedirlevels">Directive <span id="CacheDirLevels">CacheDirLevels</span> <a title="Lien permanent" href="#cachedirlevels" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le nombre de niveaux de sous-r&eacute;pertoires que comportera le
cache.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheDirLevels <var>niveaux</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>CacheDirLevels 2</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>La directive <code class="directive">CacheDirLevels</code> permet de
d&eacute;finir le nombre de niveaux de sous-r&eacute;pertoires que comportera le
cache. Les donn&eacute;es du cache seront stok&eacute;es au niveau correspondant
par rapport au r&eacute;pertoire <code class="directive"><a href="#cacheroot">CacheRoot</a></code>.</p>
<p>Une valeur haute pour <code class="directive">CacheDirLevels</code>
combin&eacute;e avec une valeur basse pour
<code class="directive">CacheDirLength</code> g&eacute;n&eacute;rera une arborescence
tr&egrave;s d&eacute;velopp&eacute;e, avec un petit nombre de sous-r&eacute;pertoires &agrave; chaque
niveau.</p>
<div class="note">
<p>La valeur du produit <code class="directive">CacheDirLevels</code> *
<code class="directive"><a href="#cachedirlength">CacheDirLength</a></code> ne
doit pas d&eacute;passer 20.</p>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cachemaxfilesize">Directive <span id="CacheMaxFileSize">CacheMaxFileSize</span> <a title="Lien permanent" href="#cachemaxfilesize" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>&gt;La taille maximale (en octets) d'un document pour pouvoir
&ecirc;tre stock&eacute; dans le cache</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheMaxFileSize <var>octets</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>CacheMaxFileSize 1000000</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>La directive <code class="directive">CacheMaxFileSize</code> permet de
d&eacute;finir la taille maximale d'un document, en octets, pour que
celui-ci puisse faire l'objet d'un stockage dans le cache.</p>
<pre class="prettyprint lang-config">CacheMaxFileSize 64000</pre>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cacheminfilesize">Directive <span id="CacheMinFileSize">CacheMinFileSize</span> <a title="Lien permanent" href="#cacheminfilesize" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>La taille minimale (en octets) d'un document pour pouvoir
&ecirc;tre stock&eacute; dans le cache</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheMinFileSize <var>octets</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>CacheMinFileSize 1</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>La directive <code class="directive">CacheMinFileSize</code> permet de
d&eacute;finir la taille minimale d'un document, en octets, pour que
celui-ci puisse faire l'objet d'un stockage dans le cache.</p>
<pre class="prettyprint lang-config">CacheMinFileSize 64</pre>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cachereadsize">Directive <span id="CacheReadSize">CacheReadSize</span> <a title="Lien permanent" href="#cachereadsize" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>La quantit&eacute; minimale (en octets) de donn&eacute;es &agrave; lire et &agrave;
mettre en cache avant de les envoyer au client</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheReadSize <var>octets</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>CacheReadSize 0</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>La directive <code class="directive">CacheReadSize</code> permet de
d&eacute;finir la quantit&eacute; minimale de donn&eacute;es, en octets, &agrave; lire depuis le
serveur d'arri&egrave;re-plan avant de les envoyer au client. Avec la
valeur par d&eacute;faut z&eacute;ro, toute donn&eacute;e de toutes tailles est envoy&eacute;e
au client d&egrave;s qu'elle est disponible. Avec une valeur non nulle, le
cache disque met en tampon au moins la quantit&eacute; de donn&eacute;es
correspondante avant d'envoyer la r&eacute;ponse au client. Les
performances peuvent s'en trouver am&eacute;lior&eacute;es lorsqu'on met en cache
du contenu en provenance d'un mandataire inverse.</p>
<p>Cette directive ne prend effet que lorsque les donn&eacute;es sont
enregistr&eacute;es dans le cache, et non lorsque les donn&eacute;es sont servies &agrave;
partir du cache.</p>
<pre class="prettyprint lang-config">CacheReadSize 102400</pre>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cachereadtime">Directive <span id="CacheReadTime">CacheReadTime</span> <a title="Lien permanent" href="#cachereadtime" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le temps minimum (en millisecondes) qui doit s'&eacute;couler
avant d'envoyer les donn&eacute;es au client</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheReadTime <var>millisecondes</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>CacheReadTime 0</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>La directive <code class="directive">CacheReadTime</code> permet de
d&eacute;finir le temps minimum qui doit s'&eacute;couler avant d'essayer
d'envoyer des donn&eacute;es au client. Pendant ce temps, les donn&eacute;es sont
mises en tampon avant de pouvoir &ecirc;tre envoy&eacute;es au client. Les
performances peuvent s'en trouver am&eacute;lior&eacute;es lorsqu'on met en cache
du contenu en provenance d'un mandataire inverse.</p>
<p>La valeur par d&eacute;faut z&eacute;ro d&eacute;sactive cette option.</p>
<p>Cette directive ne prend effet que lorsque les donn&eacute;es sont
enregistr&eacute;es dans le cache, et non lorsque les donn&eacute;es sont servies &agrave;
partir du cache. Il est recommand&eacute; d'harmoniser l'utilisation de cette
directive avec celle de la directive <code class="directive"><a href="#cachereadsize">CacheReadSize</a></code>, afin de s'assurer
que le serveur n'effectue pas une mise en tampon excessive au cas
o&ugrave; les donn&eacute;es arriveraient plus vite que pr&eacute;vu.</p>
<pre class="prettyprint lang-config">CacheReadTime 1000</pre>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="cacheroot">Directive <span id="CacheRoot">CacheRoot</span> <a title="Lien permanent" href="#cacheroot" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>La racine du r&eacute;pertoire dans lequel les fichiers du cache
seront stock&eacute;s</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>CacheRoot <var>r&eacute;pertoire</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache_disk</td></tr>
</table>
<p>La directive <code class="directive">CacheRoot</code> permet de d&eacute;finir
le nom du r&eacute;pertoire sur disque qui contiendra les fichiers du
cache. Si le module <code class="module"><a href="../mod/mod_cache_disk.html">mod_cache_disk</a></code> a &eacute;t&eacute; charg&eacute; ou
compil&eacute; dans le serveur Apache, cette directive <em>doit</em> &ecirc;tre
d&eacute;finie. L'absence de d&eacute;finition de la directive
<code class="directive">CacheRoot</code> provoquera une erreur de traitement
du fichier de configuration. Les directives <code class="directive"><a href="#cachedirlevels">CacheDirLevels</a></code> et <code class="directive"><a href="#cachedirlength">CacheDirLength</a></code> permettent de
d&eacute;finir la structure des sous-r&eacute;pertoires du r&eacute;pertoire racine
sp&eacute;cifi&eacute;.</p>
<pre class="prettyprint lang-config">CacheRoot c:/cacheroot</pre>
</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_cache_disk.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_cache_disk.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_cache_disk.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_cache_disk.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2026 The Apache Software Foundation.<br>Autoris&eacute; sous <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p></div><script><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
var langToggle = document.querySelector('.lang-toggle');
var topLang = document.querySelector('.toplang');
if (langToggle && topLang) {
langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); });
}
var qv = document.getElementById('quickview');
if (qv) {
document.body.appendChild(qv);
var qvBtn = document.createElement('button');
qvBtn.className = 'qv-toggle';
qvBtn.setAttribute('aria-label', 'Toggle page navigation');
qvBtn.innerHTML = '&#9776;';
document.body.appendChild(qvBtn);
qvBtn.addEventListener('click', function() {
var isOpen = qv.classList.toggle('open');
if (isOpen) {
qv.style.top = window.scrollY + 10 + 'px';
}
});
window.addEventListener('scroll', function() { qv.classList.remove('open'); });
}
//--><!]]></script>
</body></html>