<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>mod_reqtimeout - 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" type="text/javascript">
</script>

<link href="../images/favicon.ico" 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="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</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="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_reqtimeout</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_reqtimeout.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_reqtimeout.html" title="Français">&nbsp;fr&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Définit le délai maximum et le taux de transfert des
données minimum pour la réception des requêtes
</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 de Module:</a></th><td>reqtimeout_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_reqtimeout.c</td></tr></table>
<h3>Sommaire</h3>

    <p>Ce module permet de définir aisément le délai maximum et le taux de
    transfert des données minimum pour la réception des requêtes. Si ce délai
    est dépassé ou ce taux trop faible, la connexion concernée sera fermée par
    le serveur.</p>

    <p>Cet évènement sera alors enregistré dans le journal au niveau de <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code> <code>info</code>.</p>
    
    <p>Au besoin, la directive <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>
    peut être modifiée pour un enregistrement dans le journal plus explicite :</p>
    <pre class="prettyprint lang-config">LogLevel reqtimeout:info</pre>

</div>
<div id="quickview"><h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Exemples</a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#requestreadtimeout">RequestReadTimeout</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_reqtimeout">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_reqtimeout">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
<ul class="seealso">
<li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="examples" id="examples">Exemples</a> <a title="Lien permanent" href="#examples" class="permalink">&para;</a></h2>

    <ol>
      <li>
	Accorde 5 secondes pour la négociation TLS, 10 secondes pour la
	réception des en-têtes de la requête et 30 secondes pour la réception du
	corps :

        <pre class="prettyprint lang-config">RequestReadTimeout handshake=5 header=10 body=30</pre>

      </li>

      <li>
        Accorde au moins 10 secondes pour la réception du corps de
	la requête. Si le client envoie des données, augmente ce délai
	d'une seconde pour chaque paquet de 1000 octets reçus, sans
	limite supérieure (sauf si une limite a été
	spécifiée via la directive <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>) :

        <pre class="prettyprint lang-config">RequestReadTimeout body=10,MinRate=1000</pre>

      </li>

      <li>
        Accorde au moins 10 secondes pour la réception des en-têtes de la
	requête. Si le client envoie des données, augmente ce délai
	d'une seconde pour chaque paquet de 500 octets reçus, mais
	n'alloue que 30 secondes pour les en-têtes de la requête :

        <pre class="prettyprint lang-config">RequestReadTimeout header=10-30,MinRate=500</pre>

      </li>

      <li>
        En général, un serveur doit avoir ses délais d'en-tête et de
	corps configurés. Si les serveurs virtuels http et https
	utilisent une configuration commune, les délais ne doivent pas
	être définis trop bas :

        <pre class="prettyprint lang-config">RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500</pre>

      </li>

    </ol>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="requestreadtimeout" id="requestreadtimeout">Directive</a> <a name="RequestReadTimeout" id="RequestReadTimeout">RequestReadTimeout</a> <a title="Lien permanent" href="#requestreadtimeout" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit des délais maximums pour la négociation TLS, la réception des en-têtes
et/ou corps des requêtes en provenance du client.
</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RequestReadTimeout
[handshake=<var>timeout</var>[-<var>maxtimeout</var>][,MinRate=<var>rate</var>]
[header=<var>délai</var>[-<var>délai-maxi</var>][,MinRate=<var>taux-mini</var>]
[body=<var>délai</var>[-<var>délai-maxi</var>][,MinRate=<var>taux-mini</var>]
</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>RequestReadTimeout handshake=0 header=20-40,MinRate=500 body=20,MinRate=500</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_reqtimeout</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Désactivée par défaut jusqu'à la version 2.3.14. L'étape de la
<code>négociation TLS</code> est prise en compte à partir de la version
2.4.39</td></tr>
</table>
    <p>Cette directive permet de définir différents délais pour la négociation
    TLS et la réception des en-têtes et/ou corps des requêtes en provenance du
    client. Si le client ne parvient pas à franchir ces étapes dans les délais
    impartis, un code d'erreur <code>408 REQUEST TIME OUT</code> est envoyé.</p>

    <p>Pour les serveurs virtuels SSL, le délai <code>handshake</code>
    correspond à la durée de la négociation SSL initiale. Si le navigateur du
    client est configuré pour demander des listes de révocations de certificats,
    et si le serveur correspondant n'est pas disponible, le délai avant lequel
    le navigateur va abandonner son attente de CRL au cours de la négociation
    SSL initiale peut être assez important. Par conséquent, le délai
    <code>handshake</code> doit prendre en compte cette éventuelle durée
    supplémentaire pour les serveurs virtuels SSL (si nécessaire). Le délai
    concernant le corps inclut le temps nécessaire à la renégociation SSL (si
    elle est nécessaire).</p>

    <p>Lorsqu'une directive <code class="directive"><a href="../mod/core.html#acceptfilter">AcceptFilter</a></code>
    est active (ce qui est en général le cas sous Linux et FreeBSD), le socket
    n'est envoyé au processus du serveur qu'après la réception du premier octet
    (ou de l'ensemble de la requête si <code>httpready</code> est défini). Les
    délais configurés via la directive <code class="directive">RequestReadTimeout</code>
    pour la négociation TLS et la réception des en-têtes n'entrent en ligne de
    compte qu'une fois le socket reçu par le processus du serveur.</p>

    <p>Lorsqu'une connexion persistante est en attente d'une requête, c'est le
    délai défini par la directive <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> qui s'applique, et ceci que la
    directive <code class="directive">RequestReadTimeout</code> soit définie ou non.</p>

    <p>Pour chaque étape (négociation, réception des en-têtes et/ou corps), il y
    a trois méthodes pour spécifier le délai :
    </p>

    <ul>

    <li><strong>Valeur de délai fixe</strong>:<br />

    <div class="example"><p><code><var>étape</var>=<var>délai</var></code></p></div>

    <p>Le temps en secondes alloué pour franchir l'étape considérée
    (négociation, réception des en-têtes ou du corps de la requête). La valeur 0
    signifie aucune limite.</p>
    </li>

    <li><strong>Désactivation du module pour un serveur virtuel</strong>:<br />

    <div class="example"><p><code>handshake=0 header=0 body=0</code></p></div>

    <p>Avec cet exemple, le module <code class="module"><a href="../mod/mod_reqtimeout.html">mod_reqtimeout</a></code> est
    complètement désactivé (notez que <code>handshake=0</code> est la valeur par
    défaut et peut donc être omis).</p>
    </li>

    <li><strong>La valeur du délai qui est augmentée lorsque des données
    sont reçues</strong> :<br />
    <div class="example"><p><code>
    <var>étape</var>=<var>délai</var>,MinRate=<var>taux-mini</var>
    </code></p></div>

    <p>Identique à ce qui précède, mais chaque fois que des données sont
    reçues, la valeur du délai est augmentée en fonction du taux-mini
    spécifié (en octets par seconde).</p>
    </li>

    <li><strong>La valeur du délai augmente lorsque des données sont
    reçues, jusqu'à une limite supérieure</strong>:<br />
    <div class="example"><p><code>
    <var>étape</var>=<var>délai</var>-<var>délai-maxi</var>,MinRate=<var>taux-mini</var>
    </code></p></div>

    <p>Identique à ce qui précède, mais le délai n'augmentera pas au
    delà de la borne supérieure du délai spécifiée.</p>
    </li>

    </ul>

      
    
    

</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_reqtimeout.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_reqtimeout.html" title="Français">&nbsp;fr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed 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 Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_reqtimeout.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else {
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2025 The Apache Software Foundation.<br />Autorisé sous <a href="http://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="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>