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