]> granicus.if.org Git - apache/blob - docs/manual/howto/http2.html.fr.utf8
move es and fr targets to *.utf8 extension. Update transformation
[apache] / docs / manual / howto / http2.html.fr.utf8
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
4 <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
5 <!--
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7               This file is generated from xml source: DO NOT EDIT
8         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9       -->
10 <title>Guide HTTP/2 - Serveur HTTP Apache Version 2.5</title>
11 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
12 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
13 <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" />
14 <script src="../style/scripts/prettify.min.js" type="text/javascript">
15 </script>
16
17 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
18 <body id="manual-page"><div id="page-header">
19 <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>
20 <p class="apache">Serveur HTTP Apache Version 2.5</p>
21 <img alt="" src="../images/feather.png" /></div>
22 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
23 <div id="path">
24 <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="./">How-To / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Guide HTTP/2</h1>
25 <div class="toplang">
26 <p><span>Langues Disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
27 <a href="../es/howto/http2.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
28 <a href="../fr/howto/http2.html" title="Français">&nbsp;fr&nbsp;</a></p>
29 </div>
30
31     <p>Ce document est le guide de l'utilisateur de l'implémentation de HTTP/2
32     dans Apache httpd. Cette fonctionnalité en est au stade
33     <em>de production</em>, et les interfaces et directives devraient donc être
34     dorénavant relativement stables.
35     </p>
36   </div>
37 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#protocol">Le protocole HTTP/2</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#implementation">HTTP/2 dans Apache httpd</a></li>
39 <li><img alt="" src="../images/down.gif" /> <a href="#building">Compilation de httpd avec le support de HTTP/2</a></li>
40 <li><img alt="" src="../images/down.gif" /> <a href="#basic-config">Configuration de base</a></li>
41 <li><img alt="" src="../images/down.gif" /> <a href="#mpm-config">Configuration du MPM</a></li>
42 <li><img alt="" src="../images/down.gif" /> <a href="#clients">Clients</a></li>
43 <li><img alt="" src="../images/down.gif" /> <a href="#tools">Outils efficaces pour déboguer HTTP/2</a></li>
44 <li><img alt="" src="../images/down.gif" /> <a href="#push">Push serveur</a></li>
45 <li><img alt="" src="../images/down.gif" /> <a href="#earlyhints">Suggestions précoces</a></li>
46 </ul><h3>Voir aussi</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code></li><li><a href="#comments_section">Commentaires</a></li></ul></div>
47 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
48 <div class="section">
49 <h2><a name="protocol" id="protocol">Le protocole HTTP/2</a><a title="Lien permanent" href="#protocol" class="permalink">&para;</a></h2>
50     
51     <p>HTTP/2 est une évolution du protocole de la couche application le plus
52     utilisé au monde, HTTP. Cette évolution permet en particulier une utilisation
53     plus efficace des ressources réseau. Il ne modifie pas les aspects
54     fondamentaux de HTTP (sa sémantique). Entre autres, il y a toujours des
55     requêtes, des réponses et des en-têtes. Par conséquent, si vous connaissez
56     HTTP/1, vous connaissez déjà 95% de HTTP/2.</p>
57     <p>Beaucoup a déjà été écrit à propos de HTTP/2 et de son fonctionnement. La
58     documentation la plus officielle est bien entendu sa <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a> (ou <a href="http://httpwg.org/specs/rfc7540.html">cette version au format plus
59     lisible</a>). Vous trouverez ici une description des rouages de HTTP/2 dans
60     leurs moindres détails.</p>
61     <p>Le premier document à lire lorsqu'on ne connaît pas un mécanisme n'est
62     cependant pas sa RFC. Il est préférable de comprendre tout d'abord <em>ce
63     que</em> ce mécanisme est censé faire, et seulement ensuite de lire sa RFC
64     pour comprendre <em>comment</em> il fonctionne. <a href="https://daniel.haxx.se/http2/">http2  explained</a> de Daniel Stenberg
65     (l'auteur de <a href="https://curl.haxx.se">curl</a>)
66     est un bien meilleur document pour démarrer l'étude de HTTP/2. En outre, de
67     nouveaux langages s'ajoutent régulièrement à sa liste de traductions
68     disponibles !</p>
69     <p>Si vous n'avez pas envie de le lire parce que vous le trouvez trop long,
70     voici certains pièges à éviter et nouveaux termes à connaître avant de lire
71     ce document :</p>
72     <ul>
73         <li>A la différence de HTTP/1 qui est en texte pur, HTTP/2 est un
74         <strong>protocole binaire</strong>, et alors que le premier est lisible par
75         un humain (par exemple pour sniffer le trafic réseau), le second ne
76         l'est pas. Voir la <a href="https://http2.github.io/faq/#why-is-http2-binary">FAQ
77         officielle</a> pour plus de détails.</li>
78         <li><strong>h2</strong> correspond à HTTP/2 sur TLS (négociation de
79         protocole via ALPN).</li>
80         <li><strong>h2c</strong> correspond à HTTP/2 sur TCP.</li>
81         <li>Une <strong>frame</strong> ou trame est la plus petite unité de
82         communication au sein d'une connexion HTTP/2 et comporte une en-tête et
83         une séquence d'octets de longueur variable dont la structure correspond
84         au type de trame. Voir la <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">section
85         correspondante</a> de la documentation officielle pour plus de
86         détails.</li>
87         <li>Un <strong>stream</strong> est un flux bidirectionnel de frames au
88         sein d'une connexion HTTP/2. La notion correspondante dans HTTP/1 est un
89         échange de messages de type requête et réponse. Voir la <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">section
90         correspondante</a> de la documentation officielle pour plus de détails.</li>
91         <li>HTTP/2 peut gérer <strong>plusieurs streams</strong> de données sur
92         la même connexion TCP, ce qui permet d'éviter le point de blocage
93         classique de HTTP/1 pour les requêtes lentes, et de ne pas avoir à
94         ouvrir de nouvelles connexions TCP pour chaque requête/réponse (les
95         connexions persistantes ou KeepAlive avaient contourné le problème dans
96         HTTP/1 mais ne l'avaient pas entièrement résolu)</li>
97     </ul>
98   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
99 <div class="section">
100 <h2><a name="implementation" id="implementation">HTTP/2 dans Apache httpd</a><a title="Lien permanent" href="#implementation" class="permalink">&para;</a></h2>
101     
102     <p>Le protocole HTTP/2 est implémenté dans Apache httpd via un module
103     propre, pertinemment nommé <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>. Ce
104     module implémente toutes les fonctionnalités décrites par la RFC 7540 et
105     supporte les connexions en texte pur (http:), ou sécurisées (https:).
106     La variante texte pur se nomme '<code>h2c</code>', et la variante sécurisée
107     '<code>h2</code>'. <code>h2c</code> peut être en mode <em>direct</em> ou
108     <code>Upgrade:</code> via une requête initiale en HTTP/1.</p>
109     <p><a href="#push">Server Push</a> est une nouvelle fonctionnalité offerte
110     aux développeurs web par HTTP/2. La section correspondante de ce document
111     vous indiquera comment votre application peut en tirer parti.</p>
112   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
113 <div class="section">
114 <h2><a name="building" id="building">Compilation de httpd avec le support de HTTP/2</a><a title="Lien permanent" href="#building" class="permalink">&para;</a></h2>
115     
116     <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> se base sur la bibliothèque
117     de <a href="https://nghttp2.org">nghttp2</a> pour son implémentation. Pour
118     pouvoir compiler <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>, <code>libnghttp2</code> version
119     1.2.1. ou supérieure doit être installée dans votre système.</p>
120     <p>Pour déclencher la compilation de <code>mod_http2</code>, vous devez
121     ajouter l'argument '<code>--enable-http2</code>' au script
122     <code>./configure</code> que vous exécutez à la racine de l'arborescence des
123     sources de httpd. Si <code>libnghttp2</code> est installée dans un
124     répertoire non connu du chemin de vos bibliothèques, vous devez indiquer ce
125     répertoire au script <code>./configure</code> via l'argument
126     '<code>--with-nghttp2=&lt;path&gt;</code>'.</p>
127     <p>Alors que cette méthode de compilation conviendra à la plupart, certains
128     préféreront lier statiquement <code>nghttp2</code> à ce module. Pour ce
129     faire, utilisez l'argument <code>--enable-nghttp2-staticlib-deps</code>.
130     Cette méthode est pratiquement la même que celle utilisée pour lier
131     statiquement openssl à <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p>
132     <p>En parlant de SSL, vous devez savoir que la plupart des navigateurs ne
133     communiqueront en HTTP/2 que sur des URLs sécurisées de type
134     <code>https:</code> ; votre serveur doit donc supporter SSL. Mais de plus,
135     votre bibliothèque SSL devra supporter l'extension <code>ALPN</code>. Enfin,
136     si la bibliothèque que vous utilisez est OpenSSL, sa version devra être
137     1.0.2. ou supérieure.</p>
138   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
139 <div class="section">
140 <h2><a name="basic-config" id="basic-config">Configuration de base</a><a title="Lien permanent" href="#basic-config" class="permalink">&para;</a></h2>
141     
142
143     <p>Maintenant que vous disposez d'un binaire <code>httpd</code> compilé avec le
144     module <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>, l'activation de ce dernier nécessite un
145     minimum de configuration supplémentaire. En premier lieu, comme pour tout
146     module Apache, vous devez le charger :</p>
147     <pre class="prettyprint lang-config">LoadModule http2_module modules/mod_http2.so</pre>
148
149
150     <p>La seconde directive que vous devez ajouter à votre fichier de
151     configuration est</p>
152     <pre class="prettyprint lang-config">Protocols h2 http/1.1</pre>
153
154     <p>Ceci permet de définir h2, la variante sécurisée, comme le protocole
155     préféré pour les connexions à votre serveur. Si vous souhaitez que toutes les
156     variantes soient disponibles, utilisez la directive suivante :</p>
157     <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre>
158
159     <p>Selon l'endroit où vous placez cette directive, elle affectera l'ensemble
160     de votre serveur, ou seulement un ou plusieurs serveurs virtuels. Vous
161     pouvez aussi l'imbriquer comme dans l'exemple suivant :</p>
162     <pre class="prettyprint lang-config">Protocols http/1.1
163 &lt;VirtualHost ...&gt;
164     ServerName test.example.org
165     Protocols h2 http/1.1
166 &lt;/VirtualHost&gt;</pre>
167
168
169     <p>Seules les connexions en HTTP/1 seront alors permises, sauf pour le serveur
170     virtuel <code>test.example.org</code> qui acceptera aussi les connexions SSL
171     en HTTP/2.</p>
172     <div class="note"><h3>Utilisez une chaîne d'algorithmes de chiffrement forte</h3>
173     <p>La directive <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> doit
174     être définie avec une chaîne d'algorithmes de chiffrement TLS forte. Même si
175     la version actuelle de <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> n'impose pas d'algorithmes de chiffrement
176     particuliers, la plupart des clients le font. Faire pointer un navigateur
177     vers un serveur où <code>h2</code> est activé avec une chaîne d'algorithmes
178     de chiffrement inappropriée entraînera un rejet et une retrogradation vers
179     HTTP 1.1. C'est une erreur que l'on fait couramment lorsqu'on configure
180     httpd pour HTTP/2 pour la première fois ; donc gardez la à l'esprit si vous
181     voulez éviter de longues sessions de débogage ! Si vous voulez être sûr de
182     définir une chaîne d'algorithmes de chiffrement appropriée, évitez ceux qui
183     sont listés dans la <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites">blacklist TLS HTTP/2
184     </a>.</p>
185     </div>
186     <p>L'ordre des protocoles indiqués est aussi important. Par défaut, le
187     premier sera le protocole préféré. Lorsqu'un client offre plusieurs choix,
188     c'est le plus à gauche qui sera sélectionné. Dans</p>
189     <pre class="prettyprint lang-config">Protocols http/1.1 h2</pre>
190
191     <p>le protocole préféré sera HTTP/1 et il sera toujours sélectionné sauf si
192     un client ne supporte <em>que</em> h2. Comme nous souhaitons communiquer en
193     HTTP/2 avec les clients qui le supportent, la meilleure définition de la
194     directive est</p>
195     <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre>
196
197
198     <p>Toujours à propos de l'ordre des protocoles, le client a lui aussi ses
199     propres préférences en la matière. À ce titre, si vous le souhaitez, vous
200     pouvez configurer votre serveur pour qu'il sélectionne non plus son
201     protocole préféré, mais au contraire le protocole préféré
202     du client :</p>
203     <pre class="prettyprint lang-config">ProtocolsHonorOrder Off</pre>
204
205     <p>Avec cette directive, l'ordre des protocoles que <em>vous</em> avez
206     défini devient caduque et seul l'ordre défini par le client sera pris en
207     compte.</p>
208     <p>Une dernière chose : les protocoles que vous définissez ne sont pas
209     vérifiés quant à leurs validité ou orthographe. Vous pouvez très bien
210     définir des protocoles qui n'existent pas, et il n'est donc pas nécessaire
211     de filtrer le contenu de la directive <code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code> avec des vérifications de type
212     <code class="directive"><a href="../mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>.</p>
213     <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
214     la section à propos de la <a href="../mod/mod_http2.html#dimensioning">consommation supplémentaire de
215     ressources</a>, ainsi que la section expliquant comment gérer les <a href="../mod/mod_http2.html#misdirected">serveurs multiples avec certificat
216     commun</a>.</p>
217   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
218 <div class="section">
219 <h2><a name="mpm-config" id="mpm-config">Configuration du MPM</a><a title="Lien permanent" href="#mpm-config" class="permalink">&para;</a></h2>
220     
221
222     <p>Tous les modules multiprocessus (MPM) fournis avec httpd supportent
223     HTTP/2. Cependant, si vous utilisez le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code>, vous allez
224     faire face à de sévères restrictions.</p>
225     <p>Avec le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> ne traitera
226     qu'une requête à la fois par connexion alors que les clients tels que les
227     navigateurs internet envoient de nombreuses requêtes au même moment. Si
228     l'une d'entre elles est longue à traiter (ou implique une longue
229     interrogation), les autres requêtes seront mises en attente.</p>
230     <p>Par défaut, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> ne passe pas outre cette limitation pour
231     la simple et bonne raison que le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> n'est aujourd'hui
232     choisi que si vous exécutez des moteurs de traitement qui ne sont pas préparés
233     pour le multithreading (par exemple qui se crashent lorsque plusieurs
234     requêtes arrivent).</p>
235     <p>Si votre plateforme et votre installation de httpd le supportent, la
236     meilleur solution consiste actuellement à utiliser le MPM
237     <code class="module"><a href="../mod/event.html">event</a></code>.
238     </p>
239     <p>Si vous n'avez pas d'autre choix que d'utiliser le MPM
240     <code class="module"><a href="../mod/prefork.html">prefork</a></code>, mais souhaitez tout de même traiter plusieurs requêtes
241     simultanément, vous pouvez jouer avec la directive <code class="directive"><a href="../mod/mod_http2.html#h2minworkers">H2MinWorkers</a></code>, sans garantie que cela
242     fonctionne.</p>
243   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
244 <div class="section">
245 <h2><a name="clients" id="clients">Clients</a><a title="Lien permanent" href="#clients" class="permalink">&para;</a></h2>
246     
247     <p>La plupart des navigateurs modernes supportent HTTP/2, mais seulement sur
248     des connexions SSL : Firefox v43, Chrome v45, Safari v9, iOS Safari v9,
249     Opera v35, Chrome pour Android v49 et
250     Internet Explorer v11 sous Windows10 (selon cette <a href="http://caniuse.com/#search=http2">source</a>).</p>
251     <p>D'autres clients et serveurs sont listés dans le <a href="https://github.com/http2/http2-spec/wiki/Implementations">wiki des
252     implémentations</a> ; entre autres des implémentations pour c, c++, common
253     lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust,
254     scala et swift.</p>
255     <p>De nombreuses implémentations clientes autres que les navigateurs
256     supportent HTTP/2 en texte pur, h2c. L'une des plus efficaces d'entre elles
257     est <a href="https://curl.haxx.se">curl</a>.</p>
258   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
259 <div class="section">
260 <h2><a name="tools" id="tools">Outils efficaces pour déboguer HTTP/2</a><a title="Lien permanent" href="#tools" class="permalink">&para;</a></h2>
261     
262     <p>Le premier d'entre eux est bien entendu <a href="https://curl.haxx.se">curl</a>. Assurez-vous au préalable que votre
263     version supporte HTTP/2 en vérifiant ses <code>Fonctionnalités</code> :</p>
264     <pre class="prettyprint lang-config">    $ curl -V
265     curl 7.45.0 (x86_64-apple-darwin15.0.0) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 nghttp2/1.3.4
266     Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...]
267     Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP <strong>HTTP2</strong>
268     </pre>
269
270     <div class="note"><h3>homebrew sous Mac OS :</h3>
271     brew install curl --with-openssl --with-nghttp2
272     </div>
273     <p>Pour une inspection en profondeur : <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p>
274     <p>Le paquet <a href="https://nghttp2.org">nghttp2</a> inclut aussi des
275     outils comme :</p>
276     <ul>
277         <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp</a>
278         - permet de visualiser les trames HTTP/2 et ainsi de se faire une meilleure
279           idée du protocole.</li>
280         <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> -
281         permet de tester votre serveur dans des conditions extremes.</li>
282     </ul>
283     <p>Chrome fournit des journaux détaillés des connexions HTTP/2 via la page
284     <a href="chrome://net-internals/#http2">special net-internals page</a>. Il y
285     a aussi cette extension intéressante pour <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a>
286     et <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a>
287     qui permet d'indiquer que votre navigateur utilise HTTP/2.</p>
288   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
289 <div class="section">
290 <h2><a name="push" id="push">Push serveur</a><a title="Lien permanent" href="#push" class="permalink">&para;</a></h2>
291     
292     <p>Le protocole HTTP/2 permet au serveur de proposer (PUSH) des réponses
293     pour lesquelles le client n'a rien demandé. La communication autour de ces
294     réponses est du style : "voici une requête que vous n'avez jamais
295     envoyée, et la réponse vous parviendra bientôt tout de même ..."</p>
296     <p>Il y a cependant des conditions : le client peut désactiver cette
297     fonctionnalité et le serveur ne pourra alors lui proposer des réponses que
298     pour les requêtes qu'il a effectivement envoyées.</p>
299     <p>Cette fonctionnalité a pour but de permettre au serveur d'envoyer au
300     client des ressources dont il va probablement avoir besoin : par exemple une
301     ressource css ou javascript appartenant à une page html que le client a
302     demandée, un jeu d'images référencé par un css, etc...</p>
303     <p>Cette anticipation a pour avantage de permettre au client d'économiser le
304     temps qu'il lui aurait fallu pour envoyer une requête, quelques
305     millisecondes à une demi-seconde en fonction de l'éloignement du serveur.
306     Elle a cependant pour inconvénient d'imposer au client le téléchargement de
307     ressources qu'il possède peut-être déjà dans son cache. Bien entendu, HTTP/2
308     permet d'annuler prématurément de telles requêtes, mais des ressources sont
309     tout de même gaspillées.</p>
310     <p>En résumé : il n'existe pas encore de stratégie efficace pour faire le
311     meilleur usage de cette fonctionnalité de HTTP/2 et tout le monde en est
312     encore au stade de l'expérimentation. À ce titre, voici des conseils pour
313     procéder vous-même à ces expérimentations :</p>
314     <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> inspecte l'en-tête de la réponse et recherche les
315     en-têtes <code>Link</code> sous un certain format :</p>
316     <pre class="prettyprint lang-config">Link &lt;/xxx.css&gt;;rel=preload, &lt;/xxx.js&gt;; rel=preload</pre>
317
318     <p>Si la connexion supporte PUSH, ces deux ressources seront envoyées au
319     client. En tant que développeur web vous pouvez définir ces en-têtes soit
320     directement au niveau de la réponse de votre application, soit en
321     configurant votre serveur via</p>
322     <pre class="prettyprint lang-config">&lt;Location /xxx.html&gt;
323     Header add Link "&lt;/xxx.css&gt;;rel=preload"
324     Header add Link "&lt;/xxx.js&gt;;rel=preload"
325 &lt;/Location&gt;</pre>
326
327     <p>Si vous souhaitez utiliser des liens <code>preload</code> sans déclencher
328     de PUSH, vous pouvez utiliser le paramètre <code>nopush</code> comme suit :</p>
329     <pre class="prettyprint lang-config">Link &lt;/xxx.css&gt;;rel=preload;nopush</pre>
330
331     <p>Vous pouvez aussi désactiver les PUSHes pour l'ensemble de votre
332     serveur via la directive</p>
333     <pre class="prettyprint lang-config">H2Push Off</pre>
334
335     <p>À savoir aussi :</p>
336     <p>Le module maintient un journal des ressources ayant fait l'objet d'un
337     PUSH pour chaque connexion (en général des condensés hash des URLs), et
338     n'effectuera pas deux fois un PUSH pour la même ressource. Cependant,
339     lorsque la connexion est fermée, le journal de ses PUSHes est supprimé.</p>
340     <p>Certains développeurs planchent sur la manière de permettre au client
341     d'informer le serveur des ressources qu'il possède déjà dans son cache afin
342     d'éviter les PUSHes pour ces dernières, mais ceci n'en est actuellement qu'à
343     un stade très expérimental.</p>
344     <p>L'<a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00">
345     en-tête Accept-Push-Policy</a> est un autre dispositif expérimental
346     implémenté dans <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> ; il permet au client de définir pour
347     chaque requête quels genres de PUSHes il accepte.</p>
348   
349
350     <p>
351     La fonctionnalité PUSH n'apportera pas toujours le gain de performances dans
352     l'obtention de réponses aux requêtes. Vous trouverez plusieurs études sur ce
353     sujet sur internet qui en expliquent les avantages et inconvénients et
354     comment les particularités des clients et du réseau en influencent le
355     fonctionnement. Par exemple, le seul fait que le serveur PUSHes une
356     ressource n'implique pas forcément que le navigateur l'utilisera.</p>
357     <p>Ce qui influence le plus la réponse PUSHed, c'est la requête qui a été
358     simulée. En effet, l'URL de la requête pour un PUSH est fournie par
359     l'application, mais d'où viennent les en-têtes ? Par exemple, La requête
360     PUSH requiert-elle un en-tête <code>accept-language</code> et si oui, quelle
361     sera sa valeur ?</p>
362     <p>httpd va consulter la requête originale (celle qui a déclenché le PUSH)
363     et copier les en-têtes suivants vers la requête PUSH :
364     <code>user-agent</code>, <code>accept</code>, <code>accept-encoding</code>,
365     <code>accept-language</code> et <code>cache-control</code>.</p>
366     <p>Tous les autres en-têtes sont ignorés. Les cookies eux non plus ne seront
367     pas copiés. PUSHer des ressources qui requièrent la présence d'un cookie ne
368     fonctionnera pas. Ceci peut être sujet à débat, mais tant que ce ne sera pas
369     clairement discuté avec les navigateurs, restons prudents et évitons
370     d'exposer les cookies là où ils ne sont pas censés être visibles.</p>
371   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
372 <div class="section">
373 <h2><a name="earlyhints" id="earlyhints">Suggestions précoces</a><a title="Lien permanent" href="#earlyhints" class="permalink">&para;</a></h2>
374     
375     <p>A l'instar des ressources PUSHées, une autre méthode consiste à envoyer
376     des en-têtes <code>Link</code> au client avant même que la réponse ne soit
377     prête. Cette méthode utilise la fonctionnalité appelée "Suggestions
378     précoces" (Early Hints) décrite dans la <a href="https://tools.ietf.org/html/rfc8297">RFC 8297</a>.</p>
379     <p>Pour utiliser cette fonctionnalité, vous devez l'activer explicitement
380     sur le serveur via :</p>
381     <pre class="prettyprint lang-config">H2EarlyHints on</pre>
382
383     <p>Elle n'est en effet pas activée par défaut car certains navigateurs
384     anciens perdent pied avec de telles réponses.</p>
385     <p>Une fois cette fonctionnalité activée, vous pouvez utiliser la directive
386     <code class="directive"><a href="../mod/mod_http2.html#h2pushresource">H2PushResource</a></code> pour déclencher les
387     suggestions précoces et les PUSHes de ressources :</p>
388     <pre class="prettyprint lang-config">&lt;Location /xxx.html&gt;
389     H2PushResource /xxx.css
390     H2PushResource /xxx.js
391 &lt;/Location&gt;</pre>
392
393     <p>Le serveur enverra alors au client une réponse <code>"103 Early
394     Hints"</code> dès qu'il <em>commencera</em> à traiter la requête. Selon
395     votre application web, cet envoi peut intervenir beaucoup plus tôt que le
396     moment où les premiers en-têtes de réponse auront été déterminés.</p>
397     <p>Si <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> est activé, ceci
398     déclenchera aussi le PUSH juste après la réponse 103. Mais si <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> n'est pas activé, la réponse 103 sera
399     quand-même envoyée au client.</p>
400     </div></div>
401 <div class="bottomlang">
402 <p><span>Langues Disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
403 <a href="../es/howto/http2.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
404 <a href="../fr/howto/http2.html" title="Français">&nbsp;fr&nbsp;</a></p>
405 </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 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 <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
406 <script type="text/javascript"><!--//--><![CDATA[//><!--
407 var comments_shortname = 'httpd';
408 var comments_identifier = 'http://httpd.apache.org/docs/trunk/howto/http2.html';
409 (function(w, d) {
410     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
411         d.write('<div id="comments_thread"><\/div>');
412         var s = d.createElement('script');
413         s.type = 'text/javascript';
414         s.async = true;
415         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
416         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
417     }
418     else {
419         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
420     }
421 })(window, document);
422 //--><!]]></script></div><div id="footer">
423 <p class="apache">Copyright 2018 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
424 <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[//><!--
425 if (typeof(prettyPrint) !== 'undefined') {
426     prettyPrint();
427 }
428 //--><!]]></script>
429 </body></html>