<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
-<!-- English Revision: 1796727:1834256 (outdated) -->
+<!-- English Revision: 1834256 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<td>Le nom d'hôte de l'hôte distant</td></tr>
<tr><td><code>REMOTE_USER</code></td>
<td>Le nom de l'utilisateur authentifié, s'il existe (non
- disponible à l'intérieur d'un bloc <directive><If
- ></directive>)</td></tr>
+ disponible à l'intérieur d'un bloc <directive><If></directive>)</td></tr>
<tr><td><code>REMOTE_IDENT</code></td>
<td>Le nom de l'utilisateur défini par <module>mod_ident</module></td></tr>
<tr><td><code>SERVER_NAME</code></td>
"<code>basic</code>")</td></tr>
<tr><td><code>CONTENT_TYPE</code></td>
<td>Le type de contenu de la réponse (non
- disponible à l'intérieur d'un bloc <directive><If
- ></directive>)</td></tr>
+ disponible à l'intérieur d'un bloc <directive><If></directive>)</td></tr>
<tr><td><code>HANDLER</code></td>
<td>Le nom du <a href="handler.html">gestionnaire</a> qui a
généré la réponse</td></tr>
"<code>off</code>" dans le cas contraire</td></tr>
<tr><td><code>REQUEST_STATUS</code></td>
<td>Le code d'erreur HTTP de la requête (non
- disponible à l'intérieur d'un bloc <directive><If
- ></directive>)</td></tr>
+ disponible à l'intérieur d'un bloc <directive><If></directive>)</td></tr>
<tr><td><code>REQUEST_LOG_ID</code></td>
<td>L'identifiant du message d'erreur associé à la requête (voir
la directive <directive
<td>Identique à <code>req</code>, mais aucun nom d'en-tête n'est
ajouté à l'en-tête Vary</td><td></td></tr>
<tr><td><code>resp</code></td>
- <td>Lit l'en-tête de réponse HTTP</td><td></td></tr>
+ <td>Lit l'en-tête de réponse HTTP (La plupart des en-têtes de la réponse
+ ne seront pas encore définis pendant le traitement de la directive
+ <directive><If></directive>)</td><td></td></tr>
<tr><td><code>reqenv</code></td>
<td>Recherche une variable d'environnement de requête (on
- peut aussi utiliser le raccourci <code>v</code>).</td><td>ordonnancement</td></tr>
+ peut aussi utiliser le raccourci <code>v</code>).
+ </td>
+ <td>ordonnancement</td></tr>
<tr><td><code>osenv</code></td>
<td>Recherche une variable d'environnement du système
d'exploitation</td><td></td></tr>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1798467:1834265 (outdated) -->
+<!-- English Revision: 1834265 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
<summary>
<p>Ce document est le guide de l'utilisateur de l'implémentation de HTTP/2
- dans Apache httpd. Cette fonctionnalité en est au stade de
- <em>production</em>, et les interfaces et directives devraient
- maintenant se stabiliser.
+ dans Apache httpd. Cette fonctionnalité en est au stade
+ <em>de production</em>, et les interfaces et directives devraient donc être
+ dorénavant relativement stables.
</p>
</summary>
- <seealso><a href="../mod/mod_http2.html">mod_http2</a></seealso>
+ <seealso><module>mod_http2</module></seealso>
<section id="protocol">
<title>Le protocole HTTP/2</title>
<section id="implementation">
<title>HTTP/2 dans Apache httpd</title>
<p>Le protocole HTTP/2 est implémenté dans Apache httpd via un module
- propre, pertinemment nommé <a href="../mod/mod_http2.html">mod_http2</a>. Ce
+ propre, pertinemment nommé <module>mod_http2</module>. Ce
module implémente toutes les fonctionnalités décrites par la RFC 7540 et
supporte les connexions en texte pur (http:), ou sécurisées (https:).
La variante texte pur se nomme '<code>h2c</code>', et la variante sécurisée
<section id="building">
<title>Compilation de httpd avec le support de HTTP/2</title>
- <p><a href="../mod/mod_http2.html">mod_http2</a> se base sur la bibliothèque
+ <p><module>mod_http2</module> se base sur la bibliothèque
de <a href="https://nghttp2.org">nghttp2</a> pour son implémentation. Pour
- pouvoir compiler <code>mod_http2</code>, <code>libnghttp2</code> version
+ pouvoir compiler <module>mod_http2</module>, <code>libnghttp2</code> version
1.2.1. ou supérieure doit être installée dans votre système.</p>
<p>Pour déclencher la compilation de <code>mod_http2</code>, vous devez
ajouter l'argument '<code>--enable-http2</code>' au script
préféreront lier statiquement <code>nghttp2</code> à ce module. Pour ce
faire, utilisez l'argument <code>--enable-nghttp2-staticlib-deps</code>.
Cette méthode est pratiquement la même que celle utilisée pour lier
- statiquement openssl à mod_ssl.</p>
+ statiquement openssl à <module>mod_ssl</module>.</p>
<p>En parlant de SSL, vous devez savoir que la plupart des navigateurs ne
communiqueront en HTTP/2 que sur des URLs sécurisées de type
<code>https:</code> ; votre serveur doit donc supporter SSL. Mais de plus,
<title>Configuration de base</title>
<p>Maintenant que vous disposez d'un binaire <code>httpd</code> compilé avec le
- module <code>mod_http2</code>, l'activation de ce dernier nécessite un
+ module <module>mod_http2</module>, l'activation de ce dernier nécessite un
minimum de configuration supplémentaire. En premier lieu, comme pour tout
module Apache, vous devez le charger :</p>
<highlight language="config">
<note><title>Utilisez une chaîne d'algorithmes de chiffrement forte</title>
<p>La directive <directive module="mod_ssl">SSLCipherSuite</directive> doit
être définie avec une chaîne d'algorithmes de chiffrement TLS forte. Même si
- la version actuelle de mod_http2 n'impose pas d'algorithmes de chiffrement
+ la version actuelle de <module>mod_http2</module> n'impose pas d'algorithmes de chiffrement
particuliers, la plupart des clients le font. Faire pointer un navigateur
vers un serveur où <code>h2</code> est activé avec une chaîne d'algorithmes
de chiffrement inappropriée entraînera un rejet et une retrogradation vers
<p>Avec cette directive, l'ordre des protocoles que <em>vous</em> avez
défini devient caduque et seul l'ordre défini par le client sera pris en
compte.</p>
- <p>Une dernière chose : les protocoles que vous définissez ne sont pas vérifiés
- quant à leurs validité ou orthographe. Vous pouvez très bien définir des
- protocoles qui n'existent pas, et il n'est donc pas nécessaire de filtrer
- les <code>Protocoles</code> avec des vérifications de type
- <code>IfModule</code>.</p>
+ <p>Une dernière chose : les protocoles que vous définissez ne sont pas
+ vérifiés quant à leurs validité ou orthographe. Vous pouvez très bien
+ définir des protocoles qui n'existent pas, et il n'est donc pas nécessaire
+ de filtrer le contenu de la directive <directive
+ module="core">Protocols</directive> avec des vérifications de type
+ <directive type="section" module="core">IfModule</directive>.</p>
<p>Pour des conseils plus avancés à propos de la configuration, voir la <a
href="../mod/mod_http2.html">Documentation de mod_http2</a>, et en particulier
la section à propos de la <a
<title>Configuration du MPM</title>
<p>Tous les modules multiprocessus (MPM) fournis avec httpd supportent
- HTTP/2. Cependant, si vous utilisez le MPM <code>prefork</code>, vous allez
+ HTTP/2. Cependant, si vous utilisez le MPM <module>prefork</module>, vous allez
faire face à de sévères restrictions.</p>
- <p>Avec le MPM <code>prefork</code>, <code>mod_http2</code> ne traitera
+ <p>Avec le MPM <module>prefork</module>, <module>mod_http2</module> ne traitera
qu'une requête à la fois par connexion alors que les clients tels que les
navigateurs internet envoient de nombreuses requêtes au même moment. Si
l'une d'entre elles est longue à traiter (ou implique une longue
interrogation), les autres requêtes seront mises en attente.</p>
- <p>Par défaut, <code>mod_http2</code> ne passe pas outre cette limitation pour
- la simple et bonne raison que le MPM <code>prefork</code> n'est aujourd'hui
+ <p>Par défaut, <module>mod_http2</module> ne passe pas outre cette limitation pour
+ la simple et bonne raison que le MPM <module>prefork</module> n'est aujourd'hui
choisi que si vous exécutez des moteurs de traitement qui ne sont pas préparés
pour le multithreading (par exemple qui se crashent lorsque plusieurs
requêtes arrivent).</p>
<p>Si votre plateforme et votre installation de httpd le supportent, la
meilleur solution consiste actuellement à utiliser le MPM
- <code>event</code>.
+ <module>event</module>.
</p>
<p>Si vous n'avez pas d'autre choix que d'utiliser le MPM
- <code>prefork</code>, mais souhaitez tout de même traiter plusieurs requêtes
+ <module>prefork</module>, mais souhaitez tout de même traiter plusieurs requêtes
simultanément, vous pouvez jouer avec la directive <directive
module="mod_http2">H2MinWorkers</directive>, sans garantie que cela
fonctionne.</p>
meilleur usage de cette fonctionnalité de HTTP/2 et tout le monde en est
encore au stade de l'expérimentation. À ce titre, voici des conseils pour
procéder vous-même à ces expérimentations :</p>
- <p><code>mod_http2</code> inspecte l'en-tête de la réponse et recherche les
+ <p><module>mod_http2</module> inspecte l'en-tête de la réponse et recherche les
en-têtes <code>Link</code> sous un certain format :</p>
<highlight language="config">
Link </xxx.css>;rel=preload, </xxx.js>; rel=preload
un stade très expérimental.</p>
<p>L'<a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00">
en-tête Accept-Push-Policy</a> est un autre dispositif expérimental
- implémenté dans <code>mod_http2</code> ; il permet au client de définir pour
+ implémenté dans <module>mod_http2</module> ; il permet au client de définir pour
chaque requête quels genres de PUSHes il accepte.</p>
+
+
+ <p>
+ La fonctionnalité PUSH n'apportera pas toujours le gain de performances dans
+ l'obtention de réponses aux requêtes. Vous trouverez plusieurs études sur ce
+ sujet sur internet qui en expliquent les avantages et inconvénients et
+ comment les particularités des clients et du réseau en influencent le
+ fonctionnement. Par exemple, le seul fait que le serveur PUSHes une
+ ressource n'implique pas forcément que le navigateur l'utilisera.</p>
+ <p>Ce qui influence le plus la réponse PUSHed, c'est la requête qui a été
+ simulée. En effet, l'URL de la requête pour un PUSH est fournie par
+ l'application, mais d'où viennent les en-têtes ? Par exemple, La requête
+ PUSH requiert-elle un en-tête <code>accept-language</code> et si oui, quelle
+ sera sa valeur ?</p>
+ <p>httpd va consulter la requête originale (celle qui a déclenché le PUSH)
+ et copier les en-têtes suivants vers la requête PUSH :
+ <code>user-agent</code>, <code>accept</code>, <code>accept-encoding</code>,
+ <code>accept-language</code> et <code>cache-control</code>.</p>
+ <p>Tous les autres en-têtes sont ignorés. Les cookies eux non plus ne seront
+ pas copiés. PUSHer des ressources qui requièrent la présence d'un cookie ne
+ fonctionnera pas. Ceci peut être sujet à débat, mais tant que ce ne sera pas
+ clairement discuté avec les navigateurs, restons prudents et évitons
+ d'exposer les cookies là où ils ne sont pas censés être visibles.</p>
</section>
+ <section id="earlyhints">
+ <title>Suggestions précoces</title>
+ <p>A l'instar des ressources PUSHées, une autre méthode consiste à envoyer
+ des en-têtes <code>Link</code> au client avant même que la réponse ne soit
+ prête. Cette méthode utilise la fonctionnalité appelée "Suggestions
+ précoces" (Early Hints) décrite dans la <a
+ href="https://tools.ietf.org/html/rfc8297">RFC 8297</a>.</p>
+ <p>Pour utiliser cette fonctionnalité, vous devez l'activer explicitement
+ sur le serveur via :</p>
+ <highlight language="config">
+H2EarlyHints on
+ </highlight>
+ <p>Elle n'est en effet pas activée par défaut car certains navigateurs
+ anciens perdent pied avec de telles réponses.</p>
+ <p>Une fois cette fonctionnalité activée, vous pouvez utiliser la directive
+ <directive module="mod_http2">H2PushResource</directive> pour déclencher les
+ suggestions précoces et les PUSHes de ressources :</p>
+ <highlight language="config">
+<Location /xxx.html>
+ H2PushResource /xxx.css
+ H2PushResource /xxx.js
+</Location>
+ </highlight>
+ <p>Le serveur enverra alors au client une réponse <code>"103 Early
+ Hints"</code> dès qu'il <em>commencera</em> à traiter la requête. Selon
+ votre application web, cet envoi peut intervenir beaucoup plus tôt que le
+ moment où les premiers en-têtes de réponse auront été déterminés.</p>
+ <p>Si <directive module="mod_http2">H2Push</directive> est activé, ceci
+ déclenchera aussi le PUSH juste après la réponse 103. Mais si <directive
+ module="mod_http2">H2Push</directive> n'est pas activé, la réponse 103 sera
+ quand-même envoyée au client.</p>
+ </section>
+
</manualpage>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1834093:1834524 (outdated) -->
+<!-- English Revision: 1834524 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
charge des mandataires et aux membres des groupes de répartition de
charge</description>
<syntax>ProxySet <var>url</var> <var>clé=valeur [clé=valeur ...]</var></syntax>
-<contextlist><context>directory</context>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context>
</contextlist>
<compatibility>ProxySet n'est disponible que depuis la version 2.2
du serveur HTTP Apache.</compatibility>
<code>[P]</code>.</p>
<p>Le mot-clé optionnel <var>interpolate</var>, en combinaison avec la directive
- <directive>ProxyPassInterpolateEnv</directive>, permet à ProxyPass
+ <directive module="mod_proxy">ProxyPassInterpolateEnv</directive>, permet à ProxyPass
d'interpoler les variables d'environnement à l'aide de la syntaxe
<var>${VARNAME}</var>. Notez que de nombreuses variables
d'environnement standard dérivées de CGI n'existeront pas lorsque
l'interpolation se produit ; vous devrez alors encore avoir avoir
recours à <module>mod_rewrite</module> pour des règles
- complexes. Notez aussi que l'interpolation n'est pas supportée dans
- la partie protocole d'une URL. La détermination dynamique du
- protocole peut être effectuée à l'aide de
- <module>mod_rewrite</module> comme dans l'exemple suivant :</p>
+ complexes. Notez aussi que l'interpolation n'est supportée dans
+ la partie protocole/hostname/port d'une URL que pour les variables qui sont
+ disponibles au moment où la directive est interprétée (comme pour la
+ directive <directive module="core">Define</directive>). La détermination
+ dynamique de ces champs peut être effectuée à l'aide de
+ <module>mod_rewrite</module>, et l'exemple suivant décrit comment utiliser
+ <module>mod_rewrite</module> pour définir dynamiquement le protocole à http
+ ou https :</p>
<highlight language="config">
RewriteEngine On
de configuration par la valeur de la variable d'environnement
<code>nom_var</code> (si l'option <var>interpolate</var> est
spécifiée).</p>
- <p>Conservez cette directive à off (pour les performances du
- serveur), sauf si vous en avez réellement besoin.</p>
+ <p>La partie protocole/hostname/port de <directive>ProxyPass</directive>
+ peut contenir des variables, mais seulement celles qui sont accessibles au
+ moment où la directive est interprétée (similairement à la directive
+ <directive module="core">Define</directive>). Pour tous les autres cas,
+ utilisez plutôt <module>mod_rewrite</module>.</p>
+ <note type="warning"><title>Avertissement concernant les performances</title>
+ <p>Laissez cette directive à off, à moins que vous n'en ayez réellemnt
+ besoin ! Par exemple, ajouter des variables à
+ <directive>ProxyPass</directive> peut entraîner l'utilisation des serveurs
+ d'arrière-plan de mod_proxy configurés par défaut, et ceux-ci ne permettent
+ pas un réglage fin comme la réutilisation des connexions, entre
+ autres...).</p> </note>
</usage>
</directivesynopsis>