]> granicus.if.org Git - apache/blob - docs/manual/content-negotiation.xml.fr
* Remove trailing whitespace from a bunch of *.xml files
[apache] / docs / manual / content-negotiation.xml.fr
1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
4 <!-- French translation : Lucien GENTIS -->
5 <!-- Reviewed by : Vincent Deffontaines -->
6 <!-- English Revision: 1364312:1673932 (outdated) -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <manualpage metafile="content-negotiation.xml.meta">
26
27 <title>N&eacute;gociation de contenu</title>
28
29 <summary>
30
31     <p>Apache HTTPD supporte la n&eacute;gociation de
32     contenu telle qu'elle est d&eacute;crite
33     dans la sp&eacute;cification HTTP/1.1. Il peut choisir la meilleure repr&eacute;sentation
34     d'une ressource en fonction des pr&eacute;f&eacute;rences du navigateur pour ce qui
35     concerne le type de media, les langages, le jeu de caract&egrave;res et son
36     encodage. Il impl&eacute;mente aussi quelques fonctionnalit&eacute;s pour traiter de
37     mani&egrave;re plus intelligente les requ&ecirc;tes en provenance de navigateurs qui
38     envoient des informations de n&eacute;gociation incompl&egrave;tes.</p>
39
40     <p>La n&eacute;gociation de contenu est assur&eacute;e par le module
41     <module>mod_negotiation</module> qui est compil&eacute; par d&eacute;faut
42     dans le serveur.</p>
43 </summary>
44
45 <section id="about"><title>&Agrave; propos de la n&eacute;gociation de contenu</title>
46
47     <p>Une ressource peut &ecirc;tre disponible selon diff&eacute;rentes repr&eacute;sentations.
48     Par exemple, elle peut &ecirc;tre disponible en diff&eacute;rents langages ou pour
49     diff&eacute;rents types de m&eacute;dia, ou une combinaison des deux.
50     Pour faire le meilleur choix, on peut fournir &agrave; l'utilisateur une page
51     d'index, et le laisser choisir. Cependant, le serveur peut souvent faire
52     ce choix automatiquement. Ceci est possible car les navigateurs peuvent
53     envoyer des informations sur les
54     repr&eacute;sentations qu'ils pr&eacute;f&egrave;rent &agrave; l'int&eacute;rieur de chaque requ&ecirc;te.
55     Par exemple, un navigateur peut indiquer
56     qu'il pr&eacute;f&egrave;re voir les informations en fran&ccedil;ais, mais qu'en cas
57     d'impossibilit&eacute; l'anglais peut convenir. Les navigateurs indiquent leurs
58     pr&eacute;f&eacute;rences &agrave; l'aide d'en-t&ecirc;tes dans la requ&ecirc;te. Pour ne demander que des
59     repr&eacute;sentations en fran&ccedil;ais, le navigateur peut utiliser l'en-t&ecirc;te :</p>
60
61 <example>Accept-Language: fr</example>
62
63     <p>Notez qu'il ne sera tenu compte de cette pr&eacute;f&eacute;rence que s'il existe un
64     choix de repr&eacute;sentations et que ces derni&egrave;res varient en fonction
65     du langage.</p>
66
67     <p>&Agrave; titre d'exemple d'une requ&ecirc;te plus complexe, ce navigateur a &eacute;t&eacute;
68     configur&eacute; pour accepter le fran&ccedil;ais et l'anglais, avec une pr&eacute;f&eacute;rence pour
69     le fran&ccedil;ais, et accepter diff&eacute;rents types de m&eacute;dia, avec une pr&eacute;f&eacute;rence
70     pour HTML par rapport &agrave; au texte plat ("plain text") ou autres types de fichiers texte, et
71     avec une pr&eacute;f&eacute;rence pour GIF ou JPEG par rapport &agrave; tout autre type de
72     m&eacute;dia, mais autorisant tout autre type de m&eacute;dia en dernier ressort :</p>
73
74 <example>
75   Accept-Language: fr; q=1.0, en; q=0.5<br />
76   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
77 </example>
78
79     <p>httpd supporte la n&eacute;gociation de contenu "server driven" (telle qu'elle
80     est d&eacute;finie dans la sp&eacute;cification HTTP/1.1), o&ugrave; c'est le serveur qui
81     d&eacute;cide quelle est la meilleure repr&eacute;sentation &agrave; retourner pour la ressource
82     demand&eacute;e. Il supporte enti&egrave;rement les en-t&ecirc;tes de requ&ecirc;te
83     <code>Accept</code>, <code>Accept-Language</code>,
84     <code>Accept-Charset</code> et <code>Accept-Encoding</code>.
85     httpd supporte aussi la n&eacute;gociation de contenu transparente, qui est un
86     protocole de n&eacute;gociation exp&eacute;rimental d&eacute;fini dans les RFC 2295 et 2296.
87     Il ne supporte pas la n&eacute;gociation de fonctionnalit&eacute; (feature negotiation)
88     telle qu'elle est d&eacute;finie dans ces RFCs.</p>
89
90     <p>Une <strong>ressource</strong> est une entit&eacute; conceptuelle identifi&eacute;e
91     par une URI (RFC 2396). Un serveur HTTP comme le serveur HTTP Apache
92     propose l'acc&egrave;s &agrave; des
93     <strong>repr&eacute;sentations</strong> de la ressource &agrave; l'int&eacute;rieur de son
94     espace de nommage, chaque repr&eacute;sentation &eacute;tant compos&eacute;e d'une s&eacute;quence
95     d'octets avec la d&eacute;finition d'un type de media, d'un jeu de caract&egrave;res,
96     d'un encodage, etc... A un instant donn&eacute;, chaque ressource peut &ecirc;tre
97     associ&eacute;e avec z&eacute;ro, une ou plusieurs repr&eacute;sentations. Si plusieurs
98     repr&eacute;sentations sont disponibles, la ressource est qualifi&eacute;e de
99     <strong>n&eacute;gociable</strong> et chacune de ses repr&eacute;sentations se nomme
100     <strong>variante</strong>. Les diff&eacute;rences entre les
101     variantes disponibles d'une ressource n&eacute;gociable constituent les
102     <strong>dimensions</strong> de la n&eacute;gociation.</p>
103 </section>
104
105 <section id="negotiation"><title>La n&eacute;gociation avec httpd</title>
106
107     <p>Afin de n&eacute;gocier une ressource, on doit fournir au serveur des
108     informations &agrave; propos de chacune des variantes. Il y a deux mani&egrave;res
109     d'accomplir ceci :</p>
110
111     <ul>
112       <li>Utiliser une liste de correspondances de type ("type-map") (<em>c'est &agrave; dire</em>
113       un fichier <code>*.var</code>) qui nomme explicitement les fichiers
114       contenant les variantes, ou</li>
115
116       <li>Utiliser une recherche "multivues", o&ugrave; le serveur effectue une
117       recherche de correspondance sur un motif de nom de fichier implicite et
118       fait son choix parmi les diff&eacute;rents r&eacute;sultats.</li>
119     </ul>
120
121    <section id="type-map"><title>Utilisation d'un fichier de
122    correspondances de types (type-map)</title>
123
124     <p>Une liste de correspondances de types est un document associ&eacute; au
125     gestionnaire <code>type-map</code> (ou, dans un souci de compatibilit&eacute;
126     ascendante avec des configurations de httpd plus anciennes, le
127     <glossary>type MIME</glossary>
128     <code>application/x-type-map</code>). Notez que pour utiliser cette
129     fonctionnalit&eacute;, vous devez, dans le fichier de configuration, d&eacute;finir un
130     gestionnaire qui associe un suffixe de fichier &agrave; une <code>type-map</code>;
131     ce qui se fait simplement en ajoutant</p>
132
133 <highlight language="config">AddHandler type-map .var</highlight>
134
135     <p>dans le fichier de configuration du serveur.</p>
136
137     <p>Les fichiers de correspondances de types doivent poss&eacute;der le m&ecirc;me nom que
138     la ressource qu'ils d&eacute;crivent, avec pour extension
139     <code>.var</code>. Dans l'exemple ci-dessous, la ressource a pour
140     nom <code>foo</code>, et le fichier de correspondances se nomme donc
141     <code>foo.var</code>.</p>
142
143     <p>Ce fichier doit comporter une entr&eacute;e pour chaque variante
144     disponible; chaque entr&eacute;e consiste en une ligne contigu&euml; d'en-t&ecirc;tes au
145     format HTTP. les entr&eacute;es sont s&eacute;par&eacute;es par des lignes vides. Les lignes
146     vides &agrave; l'int&eacute;rieur d'une entr&eacute;e sont interdites. Par convention, le
147     fichier de correspondances de types d&eacute;bute par une entr&eacute;e concernant l'entit&eacute;
148     consid&eacute;r&eacute;e dans son ensemble (bien que ce ne soit pas obligatoire, et
149     ignor&eacute; si pr&eacute;sent). Un exemple de fichier de
150     correspondance de types est fourni
151     ci-dessous.</p>
152
153     <p>Les URIs de ce fichier sont relatifs &agrave; la localisation du fichier
154     de correspondances de types. En g&eacute;n&eacute;ral, ces fichiers se trouveront dans le
155     m&ecirc;me r&eacute;pertoire que le fichier de correspondances de types, mais ce
156     n'est pas obligatoire. Vous pouvez utiliser des URIs absolus ou
157     relatifs pour tout fichier situ&eacute; sur le m&ecirc;me serveur que le fichier
158     de correspondances.</p>
159
160 <example>
161   URI: foo<br />
162 <br />
163   URI: foo.en.html<br />
164   Content-type: text/html<br />
165   Content-language: en<br />
166 <br />
167   URI: foo.fr.de.html<br />
168   Content-type: text/html;charset=iso-8859-2<br />
169   Content-language: fr, de<br />
170 </example>
171
172     <p>Notez aussi qu'un fichier de correspondances de types prend le pas sur
173     les extensions de noms de fichiers, m&ecirc;me si les Multivues sont activ&eacute;es.
174     Si les variantes sont de qualit&eacute;s diff&eacute;rentes, on doit l'indiquer
175     &agrave; l'aide du param&egrave;tre "qs" &agrave; la suite du type de m&eacute;dia, comme pour cette
176     image
177     (disponible aux formats JPEG, GIF, ou ASCII-art) : </p>
178
179 <example>
180   URI: foo<br />
181 <br />
182   URI: foo.jpeg<br />
183   Content-type: image/jpeg; qs=0.8<br />
184 <br />
185   URI: foo.gif<br />
186   Content-type: image/gif; qs=0.5<br />
187 <br />
188   URI: foo.txt<br />
189   Content-type: text/plain; qs=0.01<br />
190 </example>
191
192     <p>Les valeurs de qs peuvent varier de 0.000 &agrave; 1.000. Notez que toute
193     variante poss&eacute;dant une valeur de qs de 0.000 ne sera jamais choisie.
194     Les variantes qui n'ont pas de param&egrave;tre qs d&eacute;fini se voient attribuer
195     une valeur de 1.0. Le param&egrave;tre qs indique la qualit&eacute; relative de la
196     variante compar&eacute;e &agrave; celle des autres variantes disponibles, sans tenir
197     compte des capacit&eacute;s du client. Par exemple, un fichier JPEG poss&egrave;de
198     en g&eacute;n&eacute;ral une qualit&eacute; sup&eacute;rieure &agrave; celle d'un fichier ASCII s'il
199     repr&eacute;sente une photographie. Cependant, si la ressource repr&eacute;sent&eacute;e est
200     &agrave; un ASCII art original, la repr&eacute;sentation ASCII sera de meilleure qualit&eacute;
201     que la repr&eacute;sentation JPEG. Ainsi une valeur de qs est associ&eacute;e &agrave; une
202     variante en fonction de la nature de la ressource qu'elle repr&eacute;sente.</p>
203
204     <p>La liste compl&egrave;te des en-t&ecirc;tes reconnus est disponible dans la
205     documentation sur les <a
206     href="mod/mod_negotiation.html#typemaps">correspondances de types du
207     module mod_negotiation</a>.</p>
208 </section>
209
210 <section id="multiviews"><title>Multivues (option Multiviews)</title>
211
212     <p><code>MultiViews</code> est une option qui s'applique &agrave; un r&eacute;pertoire,
213     ce qui signifie qu'elle peut &ecirc;tre activ&eacute;e &agrave; l'aide d'une directive
214     <directive module="core">Options</directive> &agrave; l'int&eacute;rieur d'une section
215     <directive module="core"
216     type="section">Directory</directive>, <directive module="core"
217     type="section">Location</directive> ou <directive module="core"
218     type="section">Files</directive> dans
219     <code>httpd.conf</code>, ou (si <directive
220     module="core">AllowOverride</directive> est correctement positionn&eacute;e) dans
221     des fichiers
222     <code>.htaccess</code>. Notez que <code>Options All</code>
223     n'active pas <code>MultiViews</code>; vous devez activer cette option en
224     la nommant explicitement.</p>
225
226     <p>L'effet de <code>MultiViews</code> est le suivant : si le serveur re&ccedil;oit
227     une requ&ecirc;te pour <code>/tel/r&eacute;pertoire/foo</code>, si
228     <code>MultiViews</code> est activ&eacute;e pour
229     <code>/tel/r&eacute;pertoire</code>, et si
230     <code>/tel/r&eacute;pertoire/foo</code> n'existe <em>pas</em>, le serveur parcourt
231     le r&eacute;pertoire &agrave; la recherche de fichiers nomm&eacute;s foo.*, et simule
232     litt&eacute;ralement une correspondance de types (type map) qui liste tous ces
233     fichiers, en leur associant les m&ecirc;mes types de m&eacute;dia et encodages de
234     contenu qu'ils auraient eu si le client avait demand&eacute; l'acc&egrave;s &agrave; l'un
235     d'entre eux par son nom. Il choisit ensuite ce qui correspond le mieux
236     aux besoins du client.</p>
237
238     <p><code>MultiViews</code> peut aussi s'appliquer &agrave; la recherche du fichier
239     nomm&eacute; par la directive <directive
240     module="mod_dir">DirectoryIndex</directive>, si le serveur tente d'indexer
241     un r&eacute;pertoire. Si les fichiers de configuration sp&eacute;cifient</p>
242 <highlight language="config">DirectoryIndex index</highlight>
243     <p>le serveur va choisir entre <code>index.html</code>
244     et <code>index.html3</code> si les deux fichiers sont pr&eacute;sents. Si aucun
245     n'est pr&eacute;sent, mais <code>index.cgi</code> existe,
246     le serveur l'ex&eacute;cutera.</p>
247
248     <p>Si, parcequ'elle n'est pas reconnue par <code>mod_mime</code>,
249     l'extension d'un des fichiers du r&eacute;pertoire ne permet pas de
250     d&eacute;terminer son jeu de caract&egrave;res, son type de contenu, son langage, ou son
251     encodage,  alors
252     le r&eacute;sultat d&eacute;pendra de la d&eacute;finition de la directive <directive
253     module="mod_mime">MultiViewsMatch</directive>. Cette directive d&eacute;termine
254     si les gestionnaires (handlers), les filtres, et autres types d'extensions
255     peuvent participer &agrave; la n&eacute;gociation MultiVues.</p>
256 </section>
257 </section>
258
259 <section id="methods"><title>Les m&eacute;thodes de n&eacute;gociation</title>
260
261     <p>Une fois obtenue la liste des variantes pour une ressource donn&eacute;e,
262     httpd dispose de deux m&eacute;thodes pour choisir la meilleure variante &agrave;
263     retourner, s'il y a lieu, soit &agrave; partir d'un fichier de
264     correspondances de types, soit en se basant sur les noms de fichiers du
265     r&eacute;pertoire. Il n'est pas n&eacute;cessaire de conna&icirc;tre en d&eacute;tails comment la
266     n&eacute;gociation fonctionne r&eacute;ellement pour pouvoir utiliser les fonctionnalit&eacute;s
267     de n&eacute;gociation de contenu de httpd. La suite de ce document explique
268     cependant les m&eacute;thodes utilis&eacute;es pour ceux ou celles qui sont
269     int&eacute;ress&eacute;s(&eacute;es). </p>
270
271     <p>Il existe deux m&eacute;thodes de n&eacute;gociation :</p>
272
273     <ol>
274       <li><strong>La n&eacute;gociation effectu&eacute;e par le serveur selon l'algorithme
275       de httpd</strong> est normalement utilis&eacute;e. l'algorithme de
276       httpd est
277       expliqu&eacute; plus en d&eacute;tails ci-dessous. Quand cet algorithme est utilis&eacute;,
278       httpd peut parfois "bricoler" le facteur de qualit&eacute; (qs) d'une dimension
279       particuli&egrave;re afin d'obtenir un meilleur r&eacute;sultat.
280       La mani&egrave;re dont httpd peut modifier les facteurs de qualit&eacute; est
281       expliqu&eacute;e plus en d&eacute;tails ci-dessous.</li>
282
283       <li><strong>La n&eacute;gociation de contenu transparente</strong> est utilis&eacute;e
284       quand le navigateur le demande explicitement selon le m&eacute;canisme d&eacute;fini
285       dans la RFC 2295. Cette m&eacute;thode de n&eacute;gociation donne au navigateur le
286       contr&ocirc;le total du choix de la meilleure variante; le r&eacute;sultat d&eacute;pend
287       cependant de la sp&eacute;cificit&eacute; des algorithmes utilis&eacute;s par le navigateur.
288       Au cours du processus de n&eacute;gociation transparente, le navigateur peut
289       demander &agrave; httpd d'ex&eacute;cuter l'"algorithme de s&eacute;lection de variante &agrave;
290       distance" d&eacute;fini dans la RFC 2296.</li>
291     </ol>
292
293 <section id="dimensions"><title>Les dimensions de la n&eacute;gociation</title>
294
295     <table>
296       <columnspec><column width=".15"/><column width=".85"/></columnspec>
297       <tr valign="top">
298         <th>Dimension</th>
299
300         <th>Notes</th>
301       </tr>
302
303       <tr valign="top">
304         <td>Type de m&eacute;dia</td>
305
306         <td>Le navigateur affiche ses pr&eacute;f&eacute;rences &agrave; l'aide du champ d'en-t&ecirc;te
307         <code>Accept</code>. Chaque type de m&eacute;dia peut se voir associ&eacute; un facteur de
308         qualit&eacute;. La description de la variante peut aussi avoir un facteur de
309         qualit&eacute; (le param&egrave;tre "qs").</td>
310       </tr>
311
312       <tr valign="top">
313         <td>Langage</td>
314
315         <td>Le navigateur affiche ses pr&eacute;f&eacute;rences &agrave; l'aide du champ d'en-t&ecirc;te
316         <code>Accept-Language</code>. Chaque langue peut se voir associ&eacute; un facteur de
317         qualit&eacute;. Les variantes peuvent &ecirc;tre associ&eacute;es avec z&eacute;ro, un ou
318         plusieurs langages.</td>
319       </tr>
320
321       <tr valign="top">
322         <td>Encoding</td>
323
324         <td>Le navigateur affiche ses pr&eacute;f&eacute;rences &agrave; l'aide du champ d'en-t&ecirc;te
325         <code>Accept-Encoding</code>. Chaque encodage peut se voir associ&eacute; un facteur de
326         qualit&eacute;.</td>
327       </tr>
328
329       <tr valign="top">
330         <td>Charset</td>
331
332         <td>Le navigateur affiche ses pr&eacute;f&eacute;rences &agrave; l'aide du champ d'en-t&ecirc;te
333         <code>Accept-Charset</code>. Chaque jeu de caract&egrave;re peut se voir associ&eacute; un facteur de
334         qualit&eacute;. Les variantes peuvent pr&eacute;ciser un jeu de caract&egrave;res comme
335         param&egrave;tre du type de m&eacute;dia.</td>
336       </tr>
337     </table>
338 </section>
339
340 <section id="algorithm"><title>L'algorithme de n&eacute;gociation de
341 httpd</title>
342
343     <p>httpd peut utiliser l'algorithme suivant pour choisir la "meilleure"
344     variante (s'il y en a une) &agrave; retourner au navigateur. Cet algorithme n'est pas
345     configurable. Il fonctionne comme suit :</p>
346
347     <ol>
348       <li>En premier lieu, pour chaque dimension de la n&eacute;gociation, consulter
349       le champ d'en-t&ecirc;te <em>Accept*</em> appropri&eacute; et assigner une qualit&eacute; &agrave;
350       chaque variante. Si l'en-t&ecirc;te <em>Accept*</em> pour toute dimension
351       implique que la variante n'est pas acceptable, &eacute;liminer cette derni&egrave;re.
352       S'il ne reste plus de variante, aller &agrave; l'&eacute;tape 4.</li>
353
354       <li>
355         Choisir la "meilleure" variante par &eacute;limination. Chacun des tests
356         suivants est effectu&eacute; dans cet ordre. Toute variante non s&eacute;lectionn&eacute;e
357         &agrave; l'issue d'un test est &eacute;limin&eacute;e. Apr&egrave;s chaque test, s'il reste une
358         seule variante, choisir cette derni&egrave;re comme celle qui correspond le
359         mieux puis aller &agrave; l'&eacute;tape 3. S'il reste plusieurs variantes, passer
360         au test suivant.
361
362         <ol>
363           <li>Multiplier le facteur de qualit&eacute; de l'en-t&ecirc;te
364           <code>Accept</code> par le facteur de qualit&eacute; "qs" pour le type de
365           m&eacute;dia de ces variantes, et choisir la variante qui poss&egrave;de la valeur
366           la plus importante.</li>
367
368           <li>S&eacute;lectionner les variantes qui poss&egrave;dent le facteur de qualit&eacute;
369           de langage le plus haut.</li>
370
371           <li>S&eacute;lectionner les variantes dont le langage correspond le mieux,
372           en se basant sur l'ordre des langages de l'en-t&ecirc;te
373           <code>Accept-Language</code> (s'il existe), ou de la directive
374           <code>LanguagePriority</code> (si elle existe).</li>
375
376           <li>S&eacute;lectionner les variantes poss&eacute;dant le param&egrave;tre de m&eacute;dia
377           "level" le plus &eacute;lev&eacute; (utilis&eacute; pour pr&eacute;ciser la version des types de
378           m&eacute;dia text/html).</li>
379
380           <li>S&eacute;lectionner les variantes poss&eacute;dant le param&egrave;tre de m&eacute;dia
381           "charset" (jeu de caract&egrave;res) qui correspond le mieux, en se basant
382           sur la ligne d'en-t&ecirc;te <code>Accept-Charset</code> . Le jeu de
383           caract&egrave;res ISO-8859-1 est acceptable sauf s'il est explicitement
384           exclus. Les variantes avec un type de m&eacute;dia <code>text/*</code>
385           mais non explicitement associ&eacute;es avec un jeu de caract&egrave;res
386           particulier sont suppos&eacute;es &ecirc;tre en ISO-8859-1.</li>
387
388           <li>S&eacute;lectionner les variantes dont le param&egrave;tre de m&eacute;dia "charset"
389           associ&eacute; n'est <em>pas</em> ISO-8859-1. S'il n'en existe pas,
390           s&eacute;lectionner toutes les variantes.</li>
391
392           <li>S&eacute;lectionner les variantes avec le meilleur encodage. S'il existe
393           des variantes avec un encodage acceptable pour le client,
394           s&eacute;lectionner celles-ci. Sinon, s'il existe des variantes encod&eacute;es et
395           des variantes non encod&eacute;es, ne s&eacute;lectionner que les variantes non
396           encod&eacute;es. Si toutes les variantes sont encod&eacute;es ou si aucune
397           ne l'est, s&eacute;lectionner toutes les variantes.</li>
398
399           <li>S&eacute;lectionner les variantes dont le contenu a la longueur
400           la plus courte.</li>
401
402           <li>S&eacute;lectionner la premi&egrave;re des variantes restantes. Il s'agira
403           soit de la premi&egrave;re variante list&eacute;e dans le fichier de
404           correspondances de types, soit, quand les variantes sont lues depuis
405           le r&eacute;pertoire, la premi&egrave;re par ordre alphab&eacute;tique quand elles sont
406           tri&eacute;es selon le code ASCII.</li>
407         </ol>
408       </li>
409
410       <li>L'algorithme a maintenant s&eacute;lectionn&eacute; une variante consid&eacute;r&eacute;e comme
411       la "meilleure", il la retourne donc au client en guise de r&eacute;ponse.
412       L'en-t&ecirc;te HTTP <code>Vary</code> de la r&eacute;ponse est renseign&eacute; de fa&ccedil;on &agrave;
413       indiquer les dimensions de la n&eacute;gociation (les navigateurs et les caches
414       peuvent utiliser cette information lors de la mise en cache de la
415       ressource).  Travail termin&eacute;.</li>
416
417       <li>Le passage par cette &eacute;tape signifie qu'aucune variante n'a &eacute;t&eacute;
418       s&eacute;lectionn&eacute;e (parcequ'aucune n'est acceptable pour le navigateur).
419       Envoyer une r&eacute;ponse avec un code de statut 406 (qui signifie "Aucune
420       repr&eacute;sentation acceptable") et un corps comportant un document HTML qui
421       affiche les variantes disponibles. Renseigner aussi l'en-t&ecirc;te HTTP
422       <code>Vary</code> de fa&ccedil;on &agrave; indiquer les dimensions de la variante.</li>
423     </ol>
424 </section>
425 </section>
426
427 <section id="better"><title>Ajustement des valeurs de qualit&eacute;</title>
428
429     <p>Parfois httpd modifie les valeurs de qualit&eacute; par rapport &agrave; celles qui
430     d&eacute;couleraient d'une stricte interpr&eacute;tation de l'algorithme de n&eacute;gociation
431     de httpd ci-dessus, ceci pour am&eacute;liorer les r&eacute;sultats de l'algorithme pour
432     les navigateurs qui envoient des informations incompl&egrave;tes ou inappropri&eacute;es.
433     Certains des navigateurs les plus populaires envoient des informations dans
434     l'en-t&ecirc;te <code>Accept</code> qui, sans ce traitement, provoqueraient la
435     s&eacute;lection d'une variante inappropri&eacute;e dans de nombreux cas. Quand un
436     navigateur envoie des informations compl&egrave;tes et correctes ces ajustements
437     ne sont pas effectu&eacute;s.</p>
438
439 <section id="wildcards"><title>Types de m&eacute;dia et caract&egrave;res g&eacute;n&eacute;riques</title>
440
441     <p>L'en-t&ecirc;te de requ&ecirc;te <code>Accept:</code> indique les types de m&eacute;dia
442     souhait&eacute;s. Il peut aussi contenir des types de m&eacute;dia avec caract&egrave;res
443     g&eacute;n&eacute;riques, comme "image/*" ou "*/*" o&ugrave; * correspond &agrave; n'importe quelle
444     cha&icirc;ne de caract&egrave;res. Ainsi une requ&ecirc;te contenant :</p>
445
446 <example>Accept: image/*, */*</example>
447
448     <p>indiquerait que tout type de m&eacute;dia est acceptable, avec une pr&eacute;f&eacute;rence
449     pour les types commen&ccedil;ant par "image/".
450     Certains navigateurs ajoutent par d&eacute;faut des types de m&eacute;dia avec caract&egrave;res
451     g&eacute;n&eacute;riques aux types explicitement nomm&eacute;s qu'ils peuvent g&eacute;rer.
452     Par exemple :</p>
453
454 <example>
455   Accept: text/html, text/plain, image/gif, image/jpeg, */*
456 </example>
457     <p>Ceci indique que les types explicitement list&eacute;s sont pr&eacute;f&eacute;r&eacute;s, mais
458     qu'une repr&eacute;sentation avec un type diff&eacute;rent de ces derniers conviendra
459     aussi.  Les valeurs de qualit&eacute;s explicites,
460     afin de pr&eacute;ciser ce que veut vraiment le navigateur, s'utilisent
461     comme suit :</p>
462 <example>
463   Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
464 </example>
465     <p>Les types explicites n'ont pas de facteur de qualit&eacute;, la valeur par
466     d&eacute;faut de leur pr&eacute;f&eacute;rence est donc de 1.0 (la plus haute). Le type avec
467     caract&egrave;res g&eacute;n&eacute;riques */* se voit attribuer une pr&eacute;f&eacute;rence basse de 0.01,
468     si bien que les types autres que ceux explicitement list&eacute;s ne seront retourn&eacute;s
469     que s'il n'existe pas de variante correspondant &agrave; un type explicitement
470     list&eacute;.</p>
471
472     <p>Si l'en-t&ecirc;te <code>Accept:</code> ne contient <em>pas</em> aucun
473     facteur de qualit&eacute;, httpd positionne la valeur de qualit&eacute; de
474     "*/*", si present, &agrave; 0.01 pour simuler l'effet d&eacute;sir&eacute;. Il positionne aussi
475     la valeur de qualit&eacute; des types avec caract&egrave;res g&eacute;n&eacute;riques au format
476     "type/*" &agrave; 0.02 (ils sont donc pr&eacute;f&eacute;r&eacute;s &agrave; ceux correspondant &agrave; "*/*"). Si
477     un type de m&eacute;dia dans l'en-t&ecirc;te <code>Accept:</code> contient un facteur de
478     qualit&eacute;, ces valeurs sp&eacute;ciales ne seront <em>pas</em> appliqu&eacute;es, de fa&ccedil;on
479     &agrave; ce que les requ&ecirc;tes de navigateurs qui envoient les informations
480     explicites &agrave; prendre en compte fonctionnent comme souhait&eacute;.</p>
481 </section>
482
483 <section id="exceptions"><title>Exceptions dans la n&eacute;gociation du
484 langage</title>
485
486     <p>A partir de la version 2.0 de httpd, certaines exceptions ont &eacute;t&eacute;
487     ajout&eacute;es &agrave; l'algorithme de n&eacute;gociation afin de m&eacute;nager une issue de secours
488     quand la n&eacute;gociation ne trouve aucun langage correspondant.</p>
489
490     <p>Quand un client demande une page sur votre serveur, si ce dernier ne
491     parvient pas &agrave; trouver une page dont la langue corresponde &agrave; l'en-t&ecirc;te
492     <code>Accept-language</code> envoy&eacute; par le navigateur, il enverra au client
493     une r&eacute;ponse "Aucune variante acceptable" ou "Plusieurs choix possibles".
494     Pour &eacute;viter ces
495     messages d'erreur, il est possible de configurer httpd de fa&ccedil;on &agrave; ce que,
496     dans ces cas, il ignore l'en-t&ecirc;te <code>Accept-language</code> et fournisse
497     tout de m&ecirc;me un document, m&ecirc;me s'il ne correspond pas exactement &agrave; la
498     demande explicite du client. La directive <directive
499     module="mod_negotiation">ForceLanguagePriority</directive>
500     peut &ecirc;tre utilis&eacute;e pour &eacute;viter ces messages d'erreur et leur substituer une
501     page dont le langage sera d&eacute;termin&eacute; en fonction du contenu de la directive
502     <directive module="mod_negotiation">LanguagePriority</directive>.</p>
503
504     <p>Le serveur va aussi essayer d'&eacute;tendre sa recherche de correspondance aux
505     sous-ensembles de langages quand aucune correspondance exacte ne peut &ecirc;tre
506     trouv&eacute;e. Par exemple, si un client demande des documents poss&eacute;dant le
507     langage <code>en-GB</code>, c'est &agrave; dire anglais britannique, le standard
508     HTTP/1.1 n'autorise normalement pas le serveur &agrave; faire correspondre cette
509     demande &agrave; un document dont le langage est simplement <code>en</code>.
510     (Notez qu'inclure <code>en-GB</code> et non <code>en</code> dans l'en-t&ecirc;te
511     <code>Accept-Language</code> constitue une quasi-erreur de configuration,
512     car il est tr&egrave;s peu probable qu'un lecteur qui comprend l'anglais
513     britannique, ne comprenne pas l'anglais en g&eacute;n&eacute;ral. Malheureusement, de
514     nombreux clients ont r&eacute;ellement des configurations par d&eacute;faut de ce type.)
515     Cependant, si aucune autre correspondance de langage n'est possible, et que le
516     serveur est sur le point de retourner une erreur "Aucune variable
517     acceptable" ou de choisir le langage d&eacute;fini par la directive <directive
518     module="mod_negotiation">LanguagePriority</directive>, le serveur ignorera
519     la sp&eacute;cification du sous-ensemble de langage et associera la demande en
520     <code>en-GB</code> &agrave; des documents en <code>en</code>.  Implicitement,
521     httpd ajoute le langage parent &agrave; la liste de langues accept&eacute;s par le
522     client avec une valeur de qualit&eacute; tr&egrave;s basse. Notez cependant que si le
523     client demande "en-GB; q=0.9, fr; q=0.8", et le serveur dispose de
524     documents estampill&eacute;s "en" et "fr", alors c'est le document "fr" qui sera
525     retourn&eacute;, tout ceci dans un souci de compatibilit&eacute; avec la sp&eacute;cification
526     HTTP/1.1 et afin de fonctionner efficacement avec les clients
527     correctement configur&eacute;s.</p>
528
529     <p>Pour supporter les techniques avanc&eacute;es (comme les cookies ou les chemins
530     d'URL sp&eacute;ciaux) afin de d&eacute;terminer le langage pr&eacute;f&eacute;r&eacute; de l'utilisateur, le
531     module <module>mod_negotiation</module> reconna&icirc;t la
532     <a href="env.html">variable d'environnement</a>
533     <code>prefer-language</code>
534     depuis la version 2.0.47 de httpd. Si elle est d&eacute;finie et contient un
535     symbole de langage appropri&eacute;, <module>mod_negotiation</module> va essayer
536     de s&eacute;lectionner une variante correspondante. S'il n'existe pas de telle
537     variante, le processus normal de n&eacute;gociation sera lanc&eacute;.</p>
538
539     <example><title>Exemple</title>
540       <highlight language="config">
541 SetEnvIf Cookie "language=(.+)" prefer-language=$1
542 Header append Vary cookie
543     </highlight>
544     </example>
545 </section>
546 </section>
547
548 <section id="extensions"><title>Extensions &agrave; la n&eacute;gociation de contenu
549 transparente</title>
550
551 <p>httpd &eacute;tend le protocole de n&eacute;gociation de contenu transparente (RFC
552 2295) comme suit. Un nouvel &eacute;l&eacute;ment <code>{encodage ..}</code> est utilis&eacute; dans
553 les listes de variantes pour marquer celles qui ne sont disponibles qu'avec un
554 encodage de contenu sp&eacute;cifique. L'impl&eacute;mentation de l'algorithme
555 RVSA/1.0 (RFC 2296) est &eacute;tendue &agrave; la reconnaissance de variantes encod&eacute;es dans
556 la liste, et &agrave; leur utilisation en tant que variantes candidates &agrave; partir du
557 moment o&ugrave; leur encodage satisfait au contenu de l'en-t&ecirc;te de requ&ecirc;te
558 <code>Accept-Encoding</code>. L'impl&eacute;mentation RVSA/1.0 n'arrondit pas les
559 facteurs de qualit&eacute; calcul&eacute;s &agrave; 5 d&eacute;cimales avant d'avoir choisi la meilleure
560 variante.</p>
561 </section>
562
563 <section id="naming"><title>Remarques &agrave; propos des liens hypertextes et des
564 conventions de nommage</title>
565
566     <p>Si vous utilisez la n&eacute;gociation de langage, vous avez le choix entre
567     diff&eacute;rentes conventions de nommage, car les fichiers peuvent poss&eacute;der
568     plusieurs extensions, et l'ordre dans lequel ces derni&egrave;res apparaissent
569     est en g&eacute;n&eacute;ral sans rapport (voir la documentation sur le module <a
570     href="mod/mod_mime.html#multipleext">mod_mime</a>
571     pour plus de d&eacute;tails).</p>
572
573     <p>Un fichier type poss&egrave;de une extension li&eacute;e au type MIME
574     (<em>par exemple</em>, <code>html</code>), mais parfois aussi une
575     extension li&eacute;e &agrave; l'encodage (<em>par exemple</em>, <code>gz</code>),
576     et bien s&ucirc;r une extension li&eacute;e au langage
577     (<em>par exemple</em>, <code>en</code>) quand plusieurs variantes de
578     langage sont disponibles pour ce fichier.</p>
579
580     <p>Exemples :</p>
581
582     <ul>
583       <li>foo.en.html</li>
584
585       <li>foo.html.en</li>
586
587       <li>foo.en.html.gz</li>
588     </ul>
589
590     <p>Ci-dessous d'autres exemples de noms de fichiers avec des liens
591     hypertextes valides et invalides :</p>
592
593     <table border="1" cellpadding="8" cellspacing="0">
594       <columnspec><column width=".2"/><column width=".2"/>
595         <column width=".2"/></columnspec>
596       <tr>
597         <th>Nom fichier</th>
598
599         <th>lien valide</th>
600
601         <th>Lien invalide</th>
602       </tr>
603
604       <tr>
605         <td><em>foo.html.en</em></td>
606
607         <td>foo<br />
608          foo.html</td>
609
610         <td>-</td>
611       </tr>
612
613       <tr>
614         <td><em>foo.en.html</em></td>
615
616         <td>foo</td>
617
618         <td>foo.html</td>
619       </tr>
620
621       <tr>
622         <td><em>foo.html.en.gz</em></td>
623
624         <td>foo<br />
625          foo.html</td>
626
627         <td>foo.gz<br />
628          foo.html.gz</td>
629       </tr>
630
631       <tr>
632         <td><em>foo.en.html.gz</em></td>
633
634         <td>foo</td>
635
636         <td>foo.html<br />
637          foo.html.gz<br />
638          foo.gz</td>
639       </tr>
640
641       <tr>
642         <td><em>foo.gz.html.en</em></td>
643
644         <td>foo<br />
645          foo.gz<br />
646          foo.gz.html</td>
647
648         <td>foo.html</td>
649       </tr>
650
651       <tr>
652         <td><em>foo.html.gz.en</em></td>
653
654         <td>foo<br />
655          foo.html<br />
656          foo.html.gz</td>
657
658         <td>foo.gz</td>
659       </tr>
660     </table>
661
662     <p>En regardant la table ci-dessus, vous remarquerez qu'il est toujours
663     possible d'utiliser le nom de fichier sans extension dans un lien
664     (<em>par exemple</em>, <code>foo</code>). L'avantage est de pouvoir
665     dissimuler le type r&eacute;el du fichier associ&eacute; &agrave; un document et de pouvoir
666     le modifier
667     ult&eacute;rieurement, <em>par exemple</em>, de <code>html</code> &agrave;
668     <code>shtml</code> ou <code>cgi</code> sans avoir &agrave;
669     mettre &agrave; jour aucun lien.</p>
670
671     <p>Si vous souhaitez continuer &agrave; utiliser un type MIME dans vos liens
672     (<em>par exemple </em> <code>foo.html</code>), l'extension li&eacute;e au langage
673     (y compris une extension li&eacute;e &agrave; l'encodage s'il en existe une)
674     doit se trouver &agrave; droite de l'extension li&eacute;e au type MIME
675     (<em>par exemple</em>, <code>foo.html.en</code>).</p>
676 </section>
677
678 <section id="caching"><title>Remarque sur la mise en cache</title>
679
680     <p>Quand un cache stocke une repr&eacute;sentation, il l'associe avec l'URL de la
681     requ&ecirc;te. Lorsque cette URL est &agrave; nouveau demand&eacute;e, le cache peut utiliser
682     la repr&eacute;sentation stock&eacute;e. Cependant, si la ressource est n&eacute;gociable au
683     niveau du serveur, il se peut que seule la premi&egrave;re variante demand&eacute;e soit
684     mise en cache et de ce fait, la correspondance positive du cache peut
685     entra&icirc;ner une r&eacute;ponse inappropri&eacute;e. Pour
686     &eacute;viter ceci, httpd marque par
687     d&eacute;faut toutes les r&eacute;ponses qui sont retourn&eacute;es apr&egrave;s une n&eacute;gociation de
688     contenu comme "non-cachables" par les clients HTTP/1.0. httpd supporte
689     aussi les fonctionnalit&eacute;s du protocole HTTP/1.1 afin de permettre la mise
690     en cache des r&eacute;ponses n&eacute;goci&eacute;es.</p>
691
692     <p>Pour les requ&ecirc;tes en provenance d'un client compatible HTTP/1.0
693     (un navigateur ou un cache), la directive <directive
694     module="mod_negotiation">CacheNegotiatedDocs</directive> peut &ecirc;tre utilis&eacute;e
695     pour permettre la mise en cache des r&eacute;ponses qui ont fait l'objet d'une
696     n&eacute;gociation. Cette directive peut intervenir dans la configuration au
697     niveau du serveur ou de l'h&ocirc;te virtuel, et n'accepte aucun argument. Elle
698     n'a aucun effet sur les requ&ecirc;tes en provenance de clients HTTP/1.1.</p>
699
700     <p>Pour les clients HTTP/1.1, httpd envoie un en-t&ecirc;te de r&eacute;ponse HTTP
701     <code>Vary</code> afin d'indiquer les dimensions de la n&eacute;gociation pour
702     cette r&eacute;ponse. Les caches peuvent
703     utiliser cette information afin de d&eacute;terminer
704     si une requ&ecirc;te peut &ecirc;tre servie &agrave; partir de la copie locale. Pour inciter
705     un cache &agrave; utiliser la copie locale sans tenir compte des dimensions de la
706     n&eacute;gociation, d&eacute;finissez la
707     <a href="env.html#special">variable d'environnement</a>
708     <code>force-no-vary</code>.</p>
709
710 </section>
711
712 </manualpage>