bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / apache2 / manual / content-negotiation.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
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         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Négociation de Contenus - Serveur Apache HTTP</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
15 <p class="apache">Serveur Apache HTTP Version 2.0</p>
16 <img alt="" src="./images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
18 <div id="path">
19 <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.0</a></div><div id="page-content"><div id="preamble"><h1>Négociation de Contenus</h1>
20 <div class="toplang">
21 <p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="./fr/content-negotiation.html" title="Français">&nbsp;fr&nbsp;</a> |
23 <a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
24 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
25 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
26 </div>
27 <div class="outofdate">Cette traduction peut être périmée. Consultez la version
28             Anglaise pour les changements récents.</div>
29
30
31     <p>Apache suit les spécifications HTTP/1.1 en ce qui concerne 
32     les négociations de contenus. Il est ainsi possible d'utiliser
33     les informations fournies par le navigateur (préférences de langues,
34     jeu de caractères, encodage et types de médias). Apache essaye
35     aussi d'optimiser les cas des navigateurs envoyant des 
36     informations incomplètes.</p>
37
38     <p>C'est le module <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> qui fournit
39     la négociation de contenus&nbsp;; ce module est inclus dans Apache 
40     par défaut.</p>
41 </div>
42 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">À propos de la Négociation de Contenus</a></li>
43 <li><img alt="" src="./images/down.gif" /> <a href="#negotiation">Négociations avec Apache</a></li>
44 <li><img alt="" src="./images/down.gif" /> <a href="#methods">Méthodes de Négociations</a></li>
45 <li><img alt="" src="./images/down.gif" /> <a href="#better">Tricher sur les Facteurs de Qualité</a></li>
46 <li><img alt="" src="./images/down.gif" /> <a href="#extensions">Extensions vers la Négociation de Contenu
47 Transparente</a></li>
48 <li><img alt="" src="./images/down.gif" /> <a href="#naming">À propos des liens hypertextes et des conventions de nommage</a></li>
49 <li><img alt="" src="./images/down.gif" /> <a href="#caching">À propos des Caches</a></li>
50 <li><img alt="" src="./images/down.gif" /> <a href="#more">Plus d'Information</a></li>
51 </ul></div>
52 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
53 <div class="section">
54 <h2><a name="about" id="about">À propos de la Négociation de Contenus</a></h2>
55
56     <p>Différentes représentations peuvent être utilisées pour 
57     communiquer une ressource. Par exemple, plusieurs langues peuvent
58     être disponibles, ou plusieurs types de médias, voire parfois une
59     combinaison de ces possibilités.
60     Une méthode pour gérer cela est de donner le choix au visiteur,
61     en lui proposant un index général, qui lui permet par exemple de
62     choisir sa langue. Cependant, il est souvent possible de faire ce 
63     choix de manière automatique car les navigateurs peuvent préciser 
64     avec leurs requêtes, la représentation qu'ils préfèrent recevoir. Par
65     exemple, un navigateur pourrait spécifier qu'il préfère recevoir les
66     informations en français si elles sont disponibles, ou en anglais 
67     dans le cas contraire. Ce type d'information est communiqué par les
68     navigateurs, dans les en-têtes de chaque requête. Un navigateur ne
69     demandant que des documents en français enverrait</p>
70     
71 <div class="example"><p><code>Accept-Language: fr</code></p></div>
72
73     <p>Notez que cette préférence ne sera gérée par le serveur que
74     s'il existe un choix de langues du côté du serveur.</p>
75
76     <p>Voici un exemple plus complet, où le navigateur est configuré pour
77     accepter le français et l'anglais, mais avec une préférence pour le
78     français, et pour accepter divers types de médias, en préférant le 
79     HTML au texte brut, et en préférant le GIF ou le JPEG aux autres types
80     de médias (sans pour autant refuser ces derniers, le cas échéant)&nbsp;:</p>
81
82 <div class="example"><p><code>
83   Accept-Language: fr; q=1.0, en; q=0.5<br />
84   Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
85 </code></p></div>
86
87     <p>Apache supporte les négociations de contenus 'gérés par
88     le serveur', telles que spécifiées dans HTTP/1.1. Les en-têtes
89     <code>Accept</code>, <code>Accept-Language</code>, 
90     <code>Accept-Charset</code> et <code>Accept-Encoding</code> 
91     sont gérés. Apache supporte également les négociations de 
92     contenus 'transparentes', telles que définies dans les RFC
93     2295 et 2296. En revanche les fonctions de 'feature 
94     negotiation' définies dans ces RFCs ne sont pas supportées.</p>
95     
96     <p>On appelle <strong>ressource</strong> une entité conceptuelle
97     identifiée par un URI (RFC 2396). Le travail d'un serveur HTTP,
98     tel Apache, est de donner un accès à des 
99     <strong>représentations</strong> des ressources à sa disposition,
100     chaque représentation étant envoyée sous la forme d'une séquence 
101     d'octets définie selon un type de média, un jeu de caractères, 
102     un encodage, etc. À tout moment, chaque ressource est associée 
103     à zéro, une ou plusieurs représentations. Si plusieurs représentations
104     sont disponibles pour une ressource, on dit que cette dernière est
105     <strong>négociable</strong> et chacune de ses représentations
106     possibles est appelée une <strong>variante</strong>.
107     Les différentes possibilités de choisir les variantes d'une ressource
108     négociable sont appelées <strong>dimensions</strong> de la 
109     négociation.</p>
110 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
111 <div class="section">
112 <h2><a name="negotiation" id="negotiation">Négociations avec Apache</a></h2>
113
114     <p>Pour qu'Apache puisse procéder à la négociation d'une ressource,
115     il faut qu'il dispose d'informations à propos de chacune des variantes.
116     Deux méthodes sont possibles&nbsp;:</p>
117
118     <ul>
119       <li>Réaliser une "Table de Types" (<em>c'est-à-dire</em>,
120       un fichier <code>*.var</code>) qui précise explicitement les fichiers
121       définissant les variantes, ou</li>
122       
123       <li>Utiliser une recherche 'MultiViews', méthode par laquelle
124       le serveur réalise une recherche par motifs implicites,
125       et choisit parmi les résultats.</li>
126     </ul>
127
128    <h3><a name="type-map" id="type-map">Utilisation d'une Table de Types (Type Map)</a></h3>
129
130     <p>Une table de types est un document qui est associé avec le 
131     gestionnaire <code>type-map</code> (ou, dans les plus anciennes 
132     versions d'Apache, le type mime <code>application/x-type-map</code>).
133     Notez que pour implémenter cette méthode, un 'handler' doit être
134     défini dans la configuration pour associer une extension de fichier à 
135     <code>type-map</code>&nbsp;; ce qui est généralement obtenu au moyen de</p>
136     
137 <div class="example"><p><code>AddHandler type-map .var</code></p></div>
138
139     <p>dans le fichier de configuration du serveur.</p>
140
141     <p>Les fichiers de table de types portent généralement le nom de la 
142     ressource qu'ils décrivent, et contiennent une entrée correspondant
143     à chaque variante possible&nbsp;; ces entrées sont constituées de lignes
144     au format d'en-têtes HTTP. Les entrées de deux variantes distinctes
145     sont à séparer par des lignes vides. Il n'est pas permis d'utiliser
146     des lignes vides au sein d'une entrée. Il est courant de placer en 
147     début de fichier une entrée pour l'entité combinée 
148     dans son ensemble (bien que cela ne soit pas nécessaire, et ignoré
149     par Apache). Un exemple de fichier de table est donné en exemple
150     ci-après. Le nom de ce fichier serait <code>foo.var</code>, puisque
151     le fichier décrit une ressource appelée <code>foo</code>.</p>
152     
153 <div class="example"><p><code>
154   URI: foo<br />
155 <br />
156   URI: foo.en.html<br />
157   Content-type: text/html<br />
158   Content-language: en<br />
159 <br />
160   URI: foo.fr.de.html<br />
161   Content-type: text/html;charset=iso-8859-2<br />
162   Content-language: fr, de<br />
163 </code></p></div>
164
165     <p>Notez que les fichiers de table de types sont toujours
166     utilisés en priorité par Apache par rapport à l'extension du
167     nom du fichier, et ce même si l'option Multiviews est activée.
168     Des variantes présentant des qualités inégales peuvent être indiquées
169     au moyen du paramètre de type de média&nbsp;: "qs", comme dans le cas de 
170     cette image (disponible en JPEG, GIF ou ASCII-art)&nbsp;: </p>
171     
172 <div class="example"><p><code>
173   URI: foo<br />
174 <br />
175   URI: foo.jpeg<br />
176   Content-type: image/jpeg; qs=0.8<br />
177 <br />
178   URI: foo.gif<br />
179   Content-type: image/gif; qs=0.5<br />
180 <br />
181   URI: foo.txt<br />
182   Content-type: text/plain; qs=0.01<br />
183 </code></p></div>
184
185     <p>Les valeurs de qs acceptables sont comprises entre 0.000
186     et 1.000. Notez qu'une variante avec un qs de 0.000 ne sera
187     jamais choisie. La valeur de qs par défaut est de 1.0. Le
188     paramètre qs sert à indiquer la qualité de la variante, par
189     rapport aux autres variantes disponibles, et ce indépendamment
190     des possibilités du navigateur. Par exemple, un fichier JPEG
191     est généralement de meilleure qualité qu'un fichier ASCII, si
192     les 2 documents sont destinés à représenter une photographie.
193     Bien sûr, si la ressource originale est elle-même un fichier
194     ASCII, la représentation ASCII sera considéré comme de meilleure
195     qualité que la représentation JPEG. La valeur de qs dépend donc
196     de la nature de la ressource que l'on souhaite représenter.</p>
197     
198     <p>La liste complète des en-têtes utilisables est disponible
199     dans la documentation de 
200     <a href="mod/mod_negotiation.html#typemaps">mod_negotation</a>.</p>
201
202
203 <h3><a name="multiviews" id="multiviews">Multiviews</a></h3>
204
205     <p>L'option <code>MultiViews</code> est à spécifier par répertoire,
206     ce qui signifie qu'elle peut être utilisée au moyen d'une directive
207     <code class="directive"><a href="./mod/core.html#options">Options</a></code> dans une section 
208     <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, 
209     <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> ou 
210     <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> 
211     du fichier <code>httpd.conf</code>, ou dans les fichiers 
212     <code>.htaccess</code> (à condition que l'option <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> soit paramétrée pour cela).
213     Notez que <code>Options All</code> n'active pas l'option
214     <code>MultiViews</code>&nbsp;; cette dernière doit être positionnée
215     explicitement.</p>
216     
217     <p>Voici comment fonctionne <code>MultiViews</code>&nbsp;: supposons qu'un
218     serveur reçoive une requête pour <code>/some/dir/foo</code>, que l'option
219     <code>MultiViews</code> soit activée pour <code>/some/dir</code>, 
220     et que le fichier <code>/some/dir/foo</code> <em>n'</em>existe 
221     <em>pas</em>&nbsp;; alors le serveur cherche les fichiers nommés foo.* 
222     dans le répertoire /some/dir, et construit une table de types à 
223     partir de ces noms de fichiers. Dans la table, chaque fichier se 
224     voit assigner les types de médias et les encodages de contenu 
225     tels qu'ils seraient envoyés si le client les demandait par leur
226     nom propre. Apache choisit alors la meilleure représentation à 
227     envoyer au client, en fonction de ses préférences.</p>
228     
229     <p>L'option <code>MultiViews</code> sert aussi lors du choix d'un
230     index, lorsque la directive <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> est précisée. 
231     Par exemple, si la configuration contient</p>
232 <div class="example"><p><code>DirectoryIndex index</code></p></div>
233     <p>le serveur devra choisir entre les fichiers <code>index.html</code> et
234     <code>index.html3</code>, dans le cas où ces deux fichiers existent. Si
235     aucun de ces fichiers n'existe, mais qu'un fichier <code>index.cgi</code>
236     est présent, ce dernier sera exécuté par le serveur.</p>
237
238     <p>Si à la lecture du répertoire, un fichier est trouvé 
239     dont l'extension n'est pas reconnue par <code>mod_mime</code> 
240     comme précisant son jeu de caractères, sa langue, son type de 
241     contenu (Content-Type) ou son encodage, alors tout dépendra de la 
242     directive <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>.
243     Cette directive précise en effet quels gestionnaires, filtres, et
244     autres types d'extensions peuvent contribuer à la négociation
245     MultiViews.</p>
246
247 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
248 <div class="section">
249 <h2><a name="methods" id="methods">Méthodes de Négociations</a></h2>
250
251     <p>Après qu'Apache ait défini la liste de variantes possibles 
252     pour une ressource, que ce soit via un fichier de tables de 
253     types ou à partir des noms de fichiers contenus dans le répertoire, 
254     deux méthodes peuvent être invoquées pour choisir la 'meilleure' 
255     variante qui sera envoyée, pour autant qu'il en existe au moins 
256     une. Il n'est pas nécessaire de connaître ce fonctionnement pour 
257     utiliser les négociations de contenu avec Apache&nbsp;; cependant pour 
258     le lecteur intéressé la suite de ce document s'attache à décrire 
259     ce fonctionnement.</p>
260     
261     <p>Il existe deux méthodes de négociations&nbsp;:</p>
262
263     <ol>
264       <li><strong>La négociation menée par le serveur, selon 
265       l'algorithme d'Apache</strong>, est utilisée dans la plupart 
266       des cas. L'algorithme d'Apache est détaillé dans la suite de 
267       ce document. Dans les cas où cet algorithme est utilisé, il 
268       arrive qu'Apache 'triche' sur le facteur qualité (qs) d'une 
269       dimension donnée pour parvenir à un meilleur résultat. Les cas 
270       où cela se produit sont présentés dans la suite de ce document.</li>
271
272       <li><strong>La négociation transparente de contenu</strong> 
273       est utilisée sur demande spécifique du navigateur, selon la 
274       méthode définie dans la RFC 2295. Cette méthode de négociation 
275       donne au navigateur les pleins pouvoirs pour choisir la 
276       'meilleure' variante, les résultats dépendent donc des algorithmes 
277       de choix propres à chaque navigateur. Cette méthode permet 
278       également au navigateur de demander à Apache d'utiliser 
279       l'algorithme de 'sélection de variante à distance', tel que défini 
280       par la RFC 2296.</li>
281     </ol>
282       
283 <h3><a name="dimensions" id="dimensions">Dimensions d'une Négociation</a></h3>
284
285     <table>
286       
287       <tr valign="top">
288         <th>Dimension</th>
289
290         <th>Notes</th>
291       </tr>
292
293       <tr valign="top">
294         <td>Type de Média</td>
295
296         <td>Le navigateur présente ses préférences au moyen du 
297         champ <code>Accept</code> de l'en-tête. À chaque élément peut être 
298         associé un facteur de qualité. De la même manière, la description 
299         de la variante peut présenter un facteur de qualité (le 
300         paramètre "qs").</td>
301       </tr>
302
303       <tr valign="top">
304         <td>Langues</td>
305
306         <td>Le navigateur présente ses préférences au moyen du champ 
307         <code>Accept-Language</code> de l'en-tête. À chaque élément 
308         peut être associé un facteur de qualité. Les différentes 
309         variantes peuvent également être associées ou non à une 
310         ou plusieurs langues.</td>
311       </tr>
312
313       <tr valign="top">
314         <td>Encodage</td>
315
316         <td>Le navigateur présente ses préférences au moyen du champ 
317         <code>Accept-Encoding</code> de l'en-tête. À chaque élément 
318         peut être associé un facteur de qualité.</td>
319       </tr>
320
321       <tr valign="top">
322         <td>Jeu de caractères</td>
323
324         <td>Le navigateur présente ses préférences au moyen du champ 
325         <code>Accept-Charset</code> de l'en-tête. À chaque élément 
326         peut être associé un facteur de qualité. Les différentes 
327         variantes peuvent se voir associer un jeu de caractères 
328         comme type de média.</td>
329       </tr>
330     </table>
331
332
333 <h3><a name="algorithm" id="algorithm">Algorithme de Négociation d'Apache</a></h3>
334
335     <p>Apache peut utiliser l'algorithme présenté ci-après pour choisir la
336     'meilleure' variante, si elle existe, à renvoyer au navigateur. Cet
337     algorithme n'est pas configurable. Il fonctionne de cette manière&nbsp;:</p>
338
339     <ol>
340       <li>En premier lieu, pour chaque dimension de la négociation, 
341       vérifier le champ d'en-tête <em>Accept*</em> approprié et 
342       attribuer un facteur de qualité à chacune des variantes. Si 
343       l'en-tête <em>Accept*</em> d'une dimension indique que cette 
344       variante n'est pas acceptable, éliminer cette variante. S'il 
345       ne reste aucune variante, aller à l'étape 4.</li>
346
347       <li>
348         Choisir la 'meilleure' des variantes par élimination. 
349         Chacun des tests suivants est appliqué dans cet ordre. 
350         Toutes les variantes ne passant pas un test sont 
351         systématiquement éliminées. Après chacun des tests, s'il 
352         ne reste qu'une variante, la choisir comme la meilleure 
353         et aller à l'étape 3. S'il reste plus d'une variante, aller 
354         à l'étape suivante.
355         
356         <ol>
357           <li>Multiplier le facteur de qualité de l'en-tête 
358           <code>Accept</code> par le facteur qualité de la source du 
359           type de média de cette variante, et choisir les variantes 
360           avec le plus grand résultat.</li>
361           
362           <li>Choisir les variantes qui présentent le plus grand 
363           facteur de qualité de langue.</li>
364
365           <li>Choisir les variantes dont la langue correspond le 
366           mieux, soit à l'ordre de préférence des langues dans 
367           l'en-tête <code>Accept-Language</code> (s'il existe), 
368           soit à l'ordre des langues de la directive 
369           <code>LanguagePriority</code> (si elle existe).</li>
370           
371           <li>Choisir les variantes présentant le paramètre de niveau 
372           ('level') de média le plus grand (c'est ce qui est utilisé 
373           pour connaître la version des types de médias text/html).</li>
374
375           <li>Choisir les variantes dont le jeu de caractères est le 
376           meilleur, par rapport à l'en-tête <code>Accept-Charset</code>. 
377           Le jeu de caractères ISO-8859-1 est toujours acceptable, à 
378           moins qu'il n'ait été explicitement refusé. Les variantes 
379           avec un type de média <code>test/*</code> et qui ne sont 
380           pas explicitement associées à un jeu de caractère donné 
381           sont supposées encodées en ISO-8859-1.</li>
382
383           <li>Choisir les variantes qui ont un jeu de caractères 
384           défini et qui <em>n'</em>est <em>pas</em> ISO-8859-1. 
385           S'il n'existe pas de telles variantes, alors les 
386           choisir toutes.</li>
387
388           <li>Choisir les variantes présentant le meilleur encodage. 
389           S'il existe des variantes avec un encodage acceptable par 
390           le 'user-agent' du navigateur, choisir ces variantes seules. 
391           Dans le cas contraire, s'il existe à la fois des variantes 
392           encodées et non encodées, ne choisir que les variantes 
393           non encodées. Dans les autres cas, choisir toutes les 
394           variantes.</li>
395
396           <li>Choisir les variantes présentant la plus petite taille.</li>
397
398           <li>Choisir la première variante de celles qui restent. Ce 
399           sera donc soit la première variante listée dans le fichier 
400           des tables de types, soit, si les variantes sont lues d'un 
401           répertoire, celle dont le nom apparaît en premier dans un 
402           classement par code ASCII.</li>
403         </ol>
404       </li>
405
406       <li>Cet algorithme a permis de choisir la 'meilleure' des 
407       variantes, qui est renvoyée en réponse à la requête du 
408       navigateur. L'en-tête <code>Vary</code> de la réponse HTTP 
409       est utilisé pour indiquer les dimensions de la négociation 
410       (les navigateurs et les serveurs mandataires sont capables de 
411       prendre en compte cette information quand il gardent une 
412       ressource en cache). Fin des opérations.</li>
413       
414       <li>Arriver à ce point signifie qu'aucune variante n'a pu être 
415       choisie, car aucune n'est acceptable aux yeux du navigateur. 
416       Renvoyer une erreur 406 ("No acceptable representation" - NdT&nbsp;: 
417       "Aucune représentation acceptable") dans un document HTML 
418       présentant les diverses variantes possibles. L'en-tête HTTP 
419       <code>Vary</code> est également renseigné pour présenter les 
420       dimensions de la négociation.</li>
421     </ol>
422
423 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
424 <div class="section">
425 <h2><a name="better" id="better">Tricher sur les Facteurs de Qualité</a></h2>
426
427     <p>Il arrive qu'Apache modifie les facteurs de qualité par rapport 
428     à la valeur qu'ils devraient avoir en suivant strictement 
429     l'algorithme décrit plus haut. Ceci permet d'obtenir de meilleurs 
430     résultats pour gérer les navigateurs qui n'envoient pas toutes 
431     les informations ou envoient des informations erronées. Ainsi, 
432     certains navigateurs, parmi les plus répandus du marché, envoient 
433     des en-têtes <code>Accept</code> qui entraîneraient l'envoi de la 
434     mauvaise variante dans de nombreux cas. Si le navigateur envoie 
435     des informations correctes, Apache ne trichera pas sur les facteurs 
436     de qualité.</p>
437
438 <h3><a name="wildcards" id="wildcards">Types de Médias et Jokers</a></h3>
439
440     <p>L'en-tête de requête <code>Accept:</code> indique les préférences 
441     des types de médias. Elle peut comporter des 'jokers' tels que 
442     "image/*" ou "*/*", où * signifie "n'importe quoi". Ainsi, une 
443     requête présentant&nbsp;:</p>
444
445 <div class="example"><p><code>Accept: image/*, */*</code></p></div>
446
447     <p>signifierait que tout type commençant par "image/" est 
448     acceptable, comme serait acceptable tout autre type. Certains 
449     navigateurs envoient sans arrêt des jokers en plus des types 
450     qu'ils peuvent effectivement gérer. Par exemple&nbsp;:</p>
451
452 <div class="example"><p><code>
453   Accept: text/html, text/plain, image/gif, image/jpeg, */*
454 </code></p></div>
455     <p>Le but de ces informations est d'indiquer que les types 
456     explicitement cités sont les préférés mais que le 
457     navigateur accepte également d'autres représentations. 
458     En utilisant les facteurs de qualité, voici ce que devrait 
459     envoyer le navigateur&nbsp;:</p>
460 <div class="example"><p><code>
461   Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
462 </code></p></div>
463     <p>Les types explicitement cités ne présentent pas de facteur 
464     de qualité, ils reçoivent donc la valeur par défaut de 1.0 
465     (la plus haute valeur possible). Les jokers sont affectés 
466     d'une préférence très basse de 0.01, si bien que les autres 
467     types ne seront utilisés que si aucune des variantes ne 
468     correspond à un des types explicitement préférés.</p>
469
470     <p>Si le champ d'en-tête <code>Accept:</code> <em>ne</em> 
471     contient <em>aucun</em> facteur de qualité, Apache modifie 
472     le facteur de qualité de "*/*" (s'il est présent) en 0.01 
473     afin d'émuler le comportement souhaité. Apache positionne 
474     également le facteur de qualité des jokers qui se présentent 
475     sous la forme "type/*" en 0.02 (afin que ces derniers soient 
476     préférés à "*/*"). Si un seul ou plusieurs types de média de 
477     l'en-tête <code>Accept:</code> présente un facteur de qualité, 
478     ces modifications <em>ne</em> sont <em>pas</em> effectuées, 
479     afin que les requêtes des navigateurs qui envoient des 
480     informations correctes fonctionnent comme prévu.</p>
481
482
483 <h3><a name="exceptions" id="exceptions">Exceptions aux Négociations sur la Langue</a></h3>
484
485     <p>À partir d'Apache 2.0, certaines exceptions ont été ajoutées 
486     à l'algorithme de négociation afin de retomber élégamment sur 
487     nos pattes dans les cas où la négociation sur la langue 
488     n'aboutit pas.</p>
489     
490     <p>Si un client demande une page du serveur, sans que ce dernier 
491     ne puisse déterminer une page correspondant au champ 
492     <code>Accept-language</code> envoyé par le navigateur, le serveur 
493     doit renvoyer une réponse parmi "Pas de Variante Acceptable" 
494     et "Choix Multiples" au client. Afin d'éviter ces messages 
495     d'erreur, il est possible de configurer Apache pour qu'il ignore 
496     le champ <code>Accept-language</code> dans ces cas et qu'il 
497     fournisse au client un document qui ne correspond pas 
498     explicitement à sa requête. La directive 
499     <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> 
500     peut être utilisée pour passer outre à ces deux messages d'erreur 
501     et modifier la réponse du serveur au moyen de la directive 
502     <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>.</p>
503
504     <p>Le serveur va également essayer de modifier la sous-classe 
505     de langue si aucune correspondance n'est trouvée. Par exemple, 
506     dans le cas où un client demande des documents avec le langage 
507     <code>en-GB</code> pour "British English", le protocole HTTP/1.1 
508     n'autorise pas le serveur à répondre par un document qui serait 
509     marqué par <code>en</code>. (Notez que présenter 
510     <code>en-GB</code> dans l'en-tête <code>Accept-language</code> 
511     est loin d'être pertinent, il semble très peu probable que le 
512     lecteur comprenne l'anglais "British" et ne comprenne pas 
513     l'anglais "tout court". Il se trouve malheureusement que 
514     beaucoup de navigateurs présentent ce comportement.) Bref, 
515     si aucune autre langue ne correspond et que le serveur 
516     s'apprêterait normalement à envoyer une réponse d'erreur 
517     "No Acceptable Variants", ou à utiliser la méthode 
518     <code class="directive"><a href="./mod/mod_negociation.html#languagepriority">LanguagePriority</a></code> 
519     présentée ci-avant, le serveur va ignorer la sous-classe de 
520     langue <code>GB</code> et considérer que la requête 
521     <code>en-GB</code> correspond bien au document <code>en</code>. 
522     Implicitement, Apache ajoute la langue parente (<code>en</code>) 
523     à la liste des langues considérées comme acceptables par le 
524     navigateur, avec un facteur de qualité très faible. Notez 
525     cependant que si le client demande "en-GB; qs=0.9, fr; qs=0.8", 
526     et que le serveur dispose de documents marqués comme "en" et 
527     "fr", alors le document en français sera renvoyé par le serveur. 
528     Ce comportement est nécessaire, afin de garder la compatibilité 
529     avec HTTP/1.1 et fonctionner avec les navigateurs correctement 
530     configurés.</p>
531     
532     <p>Pour supporter les techniques avancées de détection de
533     préférence de langues de l'utilisateur (telles que les 
534     Cookies, ou les chemins d'URL spéciaux), Apache reconnaît 
535     depuis la version 2.0.47 la <a href="env.html">variable 
536     d'environnement</a> <code>prefer-language</code>. Si cette 
537     variable existe, et qu'elle précise une langue valide, 
538     <code class="module"><a href="./mod/mod_negociation.html">mod_negociation</a></code> cherchera une variante qui 
539     y corresponde. S'il n'en trouve pas, le processus de 
540     négociation normal se déroulera.</p>
541
542     <div class="example"><h3>Exemple</h3><p><code>
543       SetEnvIf Cookie "language=en" prefer-language=en<br />
544       SetEnvIf Cookie "language=fr" prefer-language=fr
545     </code></p></div>
546
547 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
548 <div class="section">
549 <h2><a name="extensions" id="extensions">Extensions vers la Négociation de Contenu
550 Transparente</a></h2>
551
552 <p>Apache complète le protocole de négociation de contenu (RFC 2295) 
553 comme décrit ici. Un nouvel élément <code>{encoding ..}</code> est 
554 utilisé dans la liste des variantes pour nommer celles qui ne sont 
555 disponibles que sous un encodage spécifique. L'implémentation de 
556 l'algorithme RVSA/1.0 (RFC 2296) est étendue afin d'intégrer les 
557 variantes encodées dans la liste, et de les proposer comme 
558 candidates quand leur encodage est acceptable au vu de l'en-tête 
559 <code>Accept-Encoding</code>. L'implémentation RVSA/1.0 ne tronque 
560 pas les facteurs de qualité à 5 décimales avant de choisir la 
561 meilleure des variantes.</p>
562 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
563 <div class="section">
564 <h2><a name="naming" id="naming">À propos des liens hypertextes et des conventions de nommage</a></h2>
565
566     <p>Dans le cas où la négociation de langues est utilisée, il est 
567     possible de choisir diverses conventions de nommage, car les 
568     fichiers peuvent présenter plus d'une extension, et l'ordre des 
569     extensions n'est normalement pas significatif (voir la 
570     documentation <a href="mod/mod_mime.html#multipleext">mod_mime</a> 
571     pour plus de détails).</p>
572
573     <p>Habituellement, un fichier a une extension pour son type MIME 
574     (par exemple, <code>html</code>), parfois une extension pour son 
575     encodage (par exemple, <code>gz</code>), et bien sûr une extension 
576     de langue (par exemple, <code>en</code>) pour distinguer les 
577     diverses variantes.</p>
578
579     <p>Exemples&nbsp;:</p>
580
581     <ul>
582       <li>foo.en.html</li>
583
584       <li>foo.html.en</li>
585
586       <li>foo.en.html.gz</li>
587     </ul>
588
589     <p>Voici d'autres exemples de noms de fichiers ainsi que des liens
590     hypertextes valides et invalides&nbsp;:</p>
591
592     <table class="bordered">
593       
594       <tr>
595         <th>Nom de Fichier</th>
596
597         <th>Lien valide</th>
598
599         <th>Lien invalide</th>
600       </tr>
601
602       <tr>
603         <td><em>foo.html.en</em></td>
604
605         <td>foo<br />
606          foo.html</td>
607
608         <td>-</td>
609       </tr>
610
611       <tr>
612         <td><em>foo.en.html</em></td>
613
614         <td>foo</td>
615
616         <td>foo.html</td>
617       </tr>
618
619       <tr>
620         <td><em>foo.html.en.gz</em></td>
621
622         <td>foo<br />
623          foo.html</td>
624
625         <td>foo.gz<br />
626          foo.html.gz</td>
627       </tr>
628
629       <tr>
630         <td><em>foo.en.html.gz</em></td>
631
632         <td>foo</td>
633
634         <td>foo.html<br />
635          foo.html.gz<br />
636          foo.gz</td>
637       </tr>
638
639       <tr>
640         <td><em>foo.gz.html.en</em></td>
641
642         <td>foo<br />
643          foo.gz<br />
644          foo.gz.html</td>
645
646         <td>foo.html</td>
647       </tr>
648
649       <tr>
650         <td><em>foo.html.gz.en</em></td>
651
652         <td>foo<br />
653          foo.html<br />
654          foo.html.gz</td>
655
656         <td>foo.gz</td>
657       </tr>
658     </table>
659
660     <p>Le tableau ci-dessus montre qu'il est toujours possible de 
661     spécifier le lien sans aucune extension dans un lien hypertexte. 
662     (par exemple, <code>foo</code>). L'avantage en est qu'il est 
663     ainsi possible de ne pas montrer le type d'un document, et de 
664     le modifier ultérieurement, par exemple le passer de <code>html</code> 
665     à <code>shtml</code> ou <code>cgi</code> sans avoir besoin de 
666     modifier aucun lien.</p>
667     
668     <p>Pour continuer à utiliser les types MIME dans les liens 
669     (par exemple, <code>foo.html</code>), l'extension correspondant 
670     à la langue (ainsi que l'extension d'encodage, si elle existe) 
671     doit être du coté droit de l'extension du type MIME (par exemple, 
672     <code>foo.html.en</code>).</p>
673 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
674 <div class="section">
675 <h2><a name="caching" id="caching">À propos des Caches</a></h2>
676
677     <p>Quand un cache garde en mémoire une représentation, il l'associe 
678     à l'URL de la requête. Quand la même URL vient à être redemandée, 
679     le cache peut utiliser la représentation gardée en mémoire, plutôt 
680     que de refaire une requête au serveur. Cependant, si la ressource 
681     est négociable coté serveur, le résultat pourrait en être que la 
682     réponse à la première requête mise en cache serait renvoyée de 
683     façon erronée. Pour prévenir ce problème, Apache marque toutes 
684     les réponses issues d'une négociation comme "non-cachables" par 
685     les clients HTTP/1.0. Apache supporte les spécifications du 
686     protocole HTTP/1.1 en ce qui concerne la mise en cache des 
687     réponses négociées.</p>
688
689     <p>Les requêtes venant d'un client conforme au protocole HTTP/1.0 
690     (qu'il s'agisse d'un navigateur ou d'un serveur cache) peuvent 
691     être rendues "cachables" si la directive <code class="directive"><a href="./mod/mod_negociation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> est 
692     utilisée. Cette directive peut être spécifiée aussi bien dans 
693     la configuration principale du serveur que dans un serveur 
694     virtuel, et ne nécessite pas d'argument. Elle n'a aucun impact 
695     sur les requêtes des clients fonctionnant en HTTP/1.1.</p>
696 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
697 <div class="section">
698 <h2><a name="more" id="more">Plus d'Information</a></h2>
699
700     <p>Pour plus d'informations au sujet de la négociation de contenu, voir
701     <a href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
702     Negotiation Notes</a> de Alan J. Flavell. Notez que ce 
703     document ne sera peut-être pas mis à jour en fonction des 
704     changements intervenus dans Apache 2.0.</p>
705 </div></div>
706 <div class="bottomlang">
707 <p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
708 <a href="./fr/content-negotiation.html" title="Français">&nbsp;fr&nbsp;</a> |
709 <a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
710 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
711 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
712 </div><div id="footer">
713 <p class="apache">Copyright 2009 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
714 <p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
715 </body></html>