]> granicus.if.org Git - apache/blob - docs/manual/content-negotiation.html.fr
Update transforms.
[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="./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></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 <div class="example"><p><code>AddHandler type-map .var</code></p></div>
146
147     <p>dans le fichier de configuration du serveur.</p>
148
149     <p>Les fichiers de correspondances de types doivent posséder le même nom que
150     la ressource qu'ils décrivent, avec pour extension
151     <code>.var</code>. Dans l'exemple ci-dessous, la ressource a pour
152     nom <code>foo</code>, et le fichier de correspondances se nomme donc
153     <code>foo.var</code>.</p>
154
155     <p>Ce fichier doit comporter une entrée pour chaque variante
156     disponible; chaque entrée consiste en une ligne contiguë d'en-têtes au
157     format HTTP. les entrées sont séparées par des lignes vides. Les lignes
158     vides à l'intérieur d'une entrée sont interdites. Par convention, le
159     fichier de correspondances de types débute par une entrée concernant l'entité
160     considérée dans son ensemble (bien que ce ne soit pas obligatoire, et
161     ignoré si présent). Un exemple de fichier de
162     correspondance de types est fourni
163     ci-dessous.</p>
164
165     <p>Les URIs de ce fichier sont relatifs à la localisation du fichier
166     de correspondances de types. En général, ces fichiers se trouveront dans le
167     même répertoire que le fichier de correspondances de types, mais ce
168     n'est pas obligatoire. Vous pouvez utiliser des URIs absolus ou
169     relatifs pour tout fichier situé sur le même serveur que le fichier
170     de correspondances.</p>
171
172 <div class="example"><p><code>
173   URI: foo<br />
174 <br />
175   URI: foo.en.html<br />
176   Content-type: text/html<br />
177   Content-language: en<br />
178 <br />
179   URI: foo.fr.de.html<br />
180   Content-type: text/html;charset=iso-8859-2<br />
181   Content-language: fr, de<br />
182 </code></p></div>
183
184     <p>Notez aussi qu'un fichier de correspondances de types prend le pas sur
185     les extensions de noms de fichiers, même si les Multivues sont activées.
186     Si les variantes sont de qualités différentes, on doit l'indiquer
187     à l'aide du paramètre "qs" à la suite du type de média, comme pour cette
188     image
189     (disponible aux formats JPEG, GIF, ou ASCII-art) : </p>
190
191 <div class="example"><p><code>
192   URI: foo<br />
193 <br />
194   URI: foo.jpeg<br />
195   Content-type: image/jpeg; qs=0.8<br />
196 <br />
197   URI: foo.gif<br />
198   Content-type: image/gif; qs=0.5<br />
199 <br />
200   URI: foo.txt<br />
201   Content-type: text/plain; qs=0.01<br />
202 </code></p></div>
203
204     <p>Les valeurs de qs peuvent varier de 0.000 à 1.000. Notez que toute
205     variante possédant une valeur de qs de 0.000 ne sera jamais choisie.
206     Les variantes qui n'ont pas de paramètre qs défini se voient attribuer
207     une valeur de 1.0. Le paramètre qs indique la qualité relative de la
208     variante comparée à celle des autres variantes disponibles, sans tenir
209     compte des capacités du client. Par exemple, un fichier JPEG possède
210     en général une qualité supérieure à celle d'un fichier ASCII s'il
211     représente une photographie. Cependant, si la ressource représentée est
212     à un ASCII art original, la représentation ASCII sera de meilleure qualité
213     que la représentation JPEG. Ainsi une valeur de qs est associée à une
214     variante en fonction de la nature de la ressource qu'elle représente.</p>
215
216     <p>La liste complète des en-têtes reconnus est disponible dans la
217     documentation sur les <a href="mod/mod_negotiation.html#typemaps">correspondances de types du
218     module mod_negotiation</a>.</p>
219
220
221 <h3><a name="multiviews" id="multiviews">Multivues (option Multiviews)</a></h3>
222
223     <p><code>MultiViews</code> est une option qui s'applique à un répertoire,
224     ce qui signifie qu'elle peut être activée à l'aide d'une directive
225     <code class="directive"><a href="./mod/core.html#options">Options</a></code> à l'intérieur d'une section
226     <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
227     <code>httpd.conf</code>, ou (si <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> est correctement positionnée) dans
228     des fichiers
229     <code>.htaccess</code>. Notez que <code>Options All</code>
230     n'active pas <code>MultiViews</code>; vous devez activer cette option en
231     la nommant explicitement.</p>
232
233     <p>L'effet de <code>MultiViews</code> est le suivant : si le serveur reçoit
234     une requête pour <code>/tel/répertoire/foo</code>, si
235     <code>MultiViews</code> est activée pour
236     <code>/tel/répertoire</code>, et si
237     <code>/tel/répertoire/foo</code> n'existe <em>pas</em>, le serveur parcourt
238     le répertoire à la recherche de fichiers nommés foo.*, et simule
239     littéralement une correspondance de types (type map) qui liste tous ces
240     fichiers, en leur associant les mêmes types de média et encodages de
241     contenu qu'ils auraient eu si le client avait demandé l'accès à l'un
242     d'entre eux par son nom. Il choisit ensuite ce qui correspond le mieux
243     aux besoins du client.</p>
244
245     <p><code>MultiViews</code> peut aussi s'appliquer à la recherche du fichier
246     nommé par la directive <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, si le serveur tente d'indexer
247     un répertoire. Si les fichiers de configuration spécifient</p>
248 <div class="example"><p><code>DirectoryIndex index</code></p></div>
249     <p>le serveur va choisir entre <code>index.html</code>
250     et <code>index.html3</code> si les deux fichiers sont présents. Si aucun
251     n'est présent, mais <code>index.cgi</code> existe,
252     le serveur l'exécutera.</p>
253
254     <p>Si, parcequ'elle n'est pas reconnue par <code>mod_mime</code>,
255     l'extension d'un des fichiers du répertoire ne permet pas de
256     déterminer son jeu de caractères, son type de contenu, son langage, ou son
257     encodage,  alors
258     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
259     si les gestionnaires (handlers), les filtres, et autres types d'extensions
260     peuvent participer à la négociation MultiVues.</p>
261
262 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
263 <div class="section">
264 <h2><a name="methods" id="methods">Les méthodes de négociation</a></h2>
265
266     <p>Une fois obtenue la liste des variantes pour une ressource donnée,
267     httpd dispose de deux méthodes pour choisir la meilleure variante à
268     retourner, s'il y a lieu, soit à partir d'un fichier de
269     correspondances de types, soit en se basant sur les noms de fichiers du
270     répertoire. Il n'est pas nécessaire de connaître en détails comment la
271     négociation fonctionne réellement pour pouvoir utiliser les fonctionnalités
272     de négociation de contenu de httpd. La suite de ce document explique
273     cependant les méthodes utilisées pour ceux ou celles qui sont
274     intéressés(ées). </p>
275
276     <p>Il existe deux méthodes de négociation :</p>
277
278     <ol>
279       <li><strong>La négociation effectuée par le serveur selon l'algorithme
280       de httpd</strong> est normalement utilisée. l'algorithme de
281       httpd est
282       expliqué plus en détails ci-dessous. Quand cet algorithme est utilisé,
283       httpd peut parfois "bricoler" le facteur de qualité (qs) d'une dimension
284       particulière afin d'obtenir un meilleur résultat.
285       La manière dont httpd peut modifier les facteurs de qualité est
286       expliquée plus en détails ci-dessous.</li>
287
288       <li><strong>La négociation de contenu transparente</strong> est utilisée
289       quand le navigateur le demande explicitement selon le mécanisme défini
290       dans la RFC 2295. Cette méthode de négociation donne au navigateur le
291       contrôle total du choix de la meilleure variante; le résultat dépend
292       cependant de la spécificité des algorithmes utilisés par le navigateur.
293       Au cours du processus de négociation transparente, le navigateur peut
294       demander à httpd d'exécuter l'"algorithme de sélection de variante à
295       distance" défini dans la RFC 2296.</li>
296     </ol>
297
298 <h3><a name="dimensions" id="dimensions">Les dimensions de la négociation</a></h3>
299
300     <table>
301       
302       <tr valign="top">
303         <th>Dimension</th>
304
305         <th>Notes</th>
306       </tr>
307
308       <tr valign="top">
309         <td>Type de média</td>
310
311         <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
312         <code>Accept</code>. Chaque type de média peut se voir associé un facteur de
313         qualité. La description de la variante peut aussi avoir un facteur de
314         qualité (le paramètre "qs").</td>
315       </tr>
316
317       <tr valign="top">
318         <td>Langage</td>
319
320         <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
321         <code>Accept-Language</code>. Chaque langue peut se voir associé un facteur de
322         qualité. Les variantes peuvent être associées avec zéro, un ou
323         plusieurs langages.</td>
324       </tr>
325
326       <tr valign="top">
327         <td>Encoding</td>
328
329         <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
330         <code>Accept-Encoding</code>. Chaque encodage peut se voir associé un facteur de
331         qualité.</td>
332       </tr>
333
334       <tr valign="top">
335         <td>Charset</td>
336
337         <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
338         <code>Accept-Charset</code>. Chaque jeu de caractère peut se voir associé un facteur de
339         qualité. Les variantes peuvent préciser un jeu de caractères comme
340         paramètre du type de média.</td>
341       </tr>
342     </table>
343
344
345 <h3><a name="algorithm" id="algorithm">L'algorithme de négociation de
346 httpd</a></h3>
347
348     <p>httpd peut utiliser l'algorithme suivant pour choisir la "meilleure"
349     variante (s'il y en a une) à retourner au navigateur. Cet algorithme n'est pas
350     configurable. Il fonctionne comme suit :</p>
351
352     <ol>
353       <li>En premier lieu, pour chaque dimension de la négociation, consulter
354       le champ d'en-tête <em>Accept*</em> approprié et assigner une qualité à
355       chaque variante. Si l'en-tête <em>Accept*</em> pour toute dimension
356       implique que la variante n'est pas acceptable, éliminer cette dernière.
357       S'il ne reste plus de variante, aller à l'étape 4.</li>
358
359       <li>
360         Choisir la "meilleure" variante par élimination. Chacun des tests
361         suivants est effectué dans cet ordre. Toute variante non sélectionnée
362         à l'issue d'un test est éliminée. Après chaque test, s'il reste une
363         seule variante, choisir cette dernière comme celle qui correspond le
364         mieux puis aller à l'étape 3. S'il reste plusieurs variantes, passer
365         au test suivant.
366
367         <ol>
368           <li>Multiplier le facteur de qualité de l'en-tête
369           <code>Accept</code> par le facteur de qualité "qs" pour le type de
370           média de ces variantes, et choisir la variante qui possède la valeur
371           la plus importante.</li>
372
373           <li>Sélectionner les variantes qui possèdent le facteur de qualité
374           de langage le plus haut.</li>
375
376           <li>Sélectionner les variantes dont le langage correspond le mieux,
377           en se basant sur l'ordre des langages de l'en-tête
378           <code>Accept-Language</code> (s'il existe), ou de la directive
379           <code>LanguagePriority</code> (si elle existe).</li>
380
381           <li>Sélectionner les variantes possédant le paramètre de média
382           "level" le plus élevé (utilisé pour préciser la version des types de
383           média text/html).</li>
384
385           <li>Sélectionner les variantes possédant le paramètre de média
386           "charset" (jeu de caractères) qui correspond le mieux, en se basant
387           sur la ligne d'en-tête <code>Accept-Charset</code> . Le jeu de
388           caractères ISO-8859-1 est acceptable sauf s'il est explicitement
389           exclus. Les variantes avec un type de média <code>text/*</code>
390           mais non explicitement associées avec un jeu de caractères
391           particulier sont supposées être en ISO-8859-1.</li>
392
393           <li>Sélectionner les variantes dont le paramètre de média "charset"
394           associé n'est <em>pas</em> ISO-8859-1. S'il n'en existe pas,
395           sélectionner toutes les variantes.</li>
396
397           <li>Sélectionner les variantes avec le meilleur encodage. S'il existe
398           des variantes avec un encodage acceptable pour le client,
399           sélectionner celles-ci. Sinon, s'il existe des variantes encodées et
400           des variantes non encodées, ne sélectionner que les variantes non
401           encodées. Si toutes les variantes sont encodées ou si aucune
402           ne l'est, sélectionner toutes les variantes.</li>
403
404           <li>Sélectionner les variantes dont le contenu a la longueur
405           la plus courte.</li>
406
407           <li>Sélectionner la première des variantes restantes. Il s'agira
408           soit de la première variante listée dans le fichier de
409           correspondances de types, soit, quand les variantes sont lues depuis
410           le répertoire, la première par ordre alphabétique quand elles sont
411           triées selon le code ASCII.</li>
412         </ol>
413       </li>
414
415       <li>L'algorithme a maintenant sélectionné une variante considérée comme
416       la "meilleure", il la retourne donc au client en guise de réponse.
417       L'en-tête HTTP <code>Vary</code> de la réponse est renseigné de façon à
418       indiquer les dimensions de la négociation (les navigateurs et les caches
419       peuvent utiliser cette information lors de la mise en cache de la
420       ressource).  Travail terminé.</li>
421
422       <li>Le passage par cette étape signifie qu'aucune variante n'a été
423       sélectionnée (parcequ'aucune n'est acceptable pour le navigateur).
424       Envoyer une réponse avec un code de statut 406 (qui signifie "Aucune
425       représentation acceptable") et un corps comportant un document HTML qui
426       affiche les variantes disponibles. Renseigner aussi l'en-tête HTTP
427       <code>Vary</code> de façon à indiquer les dimensions de la variante.</li>
428     </ol>
429
430 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
431 <div class="section">
432 <h2><a name="better" id="better">Ajustement des valeurs de qualité</a></h2>
433
434     <p>Parfois httpd modifie les valeurs de qualité par rapport à celles qui
435     découleraient d'une stricte interprétation de l'algorithme de négociation
436     de httpd ci-dessus, ceci pour améliorer les résultats de l'algorithme pour
437     les navigateurs qui envoient des informations incomplètes ou inappropriées.
438     Certains des navigateurs les plus populaires envoient des informations dans
439     l'en-tête <code>Accept</code> qui, sans ce traitement, provoqueraient la
440     sélection d'une variante inappropriée dans de nombreux cas. Quand un
441     navigateur envoie des informations complètes et correctes ces ajustements
442     ne sont pas effectués.</p>
443
444 <h3><a name="wildcards" id="wildcards">Types de média et caractères génériques</a></h3>
445
446     <p>L'en-tête de requête <code>Accept:</code> indique les types de média
447     souhaités. Il peut aussi contenir des types de média avec caractères
448     génériques, comme "image/*" ou "*/*" où * correspond à n'importe quelle
449     chaîne de caractères. Ainsi une requête contenant :</p>
450
451 <div class="example"><p><code>Accept: image/*, */*</code></p></div>
452
453     <p>indiquerait que tout type de média est acceptable, avec une préférence
454     pour les types commençant par "image/".
455     Certains navigateurs ajoutent par défaut des types de média avec caractères
456     génériques aux types explicitement nommés qu'ils peuvent gérer.
457     Par exemple :</p>
458
459 <div class="example"><p><code>
460   Accept: text/html, text/plain, image/gif, image/jpeg, */*
461 </code></p></div>
462     <p>Ceci indique que les types explicitement listés sont préférés, mais
463     qu'une représentation avec un type différent de ces derniers conviendra
464     aussi.  Les valeurs de qualités explicites,
465     afin de préciser ce que veut vraiment le navigateur, s'utilisent
466     comme suit :</p>
467 <div class="example"><p><code>
468   Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
469 </code></p></div>
470     <p>Les types explicites n'ont pas de facteur de qualité, la valeur par
471     défaut de leur préférence est donc de 1.0 (la plus haute). Le type avec
472     caractères génériques */* se voit attribuer une préférence basse de 0.01,
473     si bien que les types autres que ceux explicitement listés ne seront retournés
474     que s'il n'existe pas de variante correspondant à un type explicitement
475     listé.</p>
476
477     <p>Si l'en-tête <code>Accept:</code> ne contient <em>pas</em> aucun
478     facteur de qualité, httpd positionne la valeur de qualité de
479     "*/*", si present, à 0.01 pour simuler l'effet désiré. Il positionne aussi
480     la valeur de qualité des types avec caractères génériques au format
481     "type/*" à 0.02 (ils sont donc préférés à ceux correspondant à "*/*"). Si
482     un type de média dans l'en-tête <code>Accept:</code> contient un facteur de
483     qualité, ces valeurs spéciales ne seront <em>pas</em> appliquées, de façon
484     à ce que les requêtes de navigateurs qui envoient les informations
485     explicites à prendre en compte fonctionnent comme souhaité.</p>
486
487
488 <h3><a name="exceptions" id="exceptions">Exceptions dans la négociation du
489 langage</a></h3>
490
491     <p>A partir de la version 2.0 de httpd, certaines exceptions ont été
492     ajoutées à l'algorithme de négociation afin de ménager une issue de secours
493     quand la négociation ne trouve aucun langage correspondant.</p>
494
495     <p>Quand un client demande une page sur votre serveur, si ce dernier ne
496     parvient pas à trouver une page dont la langue corresponde à l'en-tête
497     <code>Accept-language</code> envoyé par le navigateur, il enverra au client
498     une réponse "Aucune variante acceptable" ou "Plusieurs choix possibles".
499     Pour éviter ces
500     messages d'erreur, il est possible de configurer httpd de façon à ce que,
501     dans ces cas, il ignore l'en-tête <code>Accept-language</code> et fournisse
502     tout de même un document, même s'il ne correspond pas exactement à la
503     demande explicite du client. La directive <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
504     peut être utilisée pour éviter ces messages d'erreur et leur substituer une
505     page dont le langage sera déterminé en fonction du contenu de la directive
506     <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>.</p>
507
508     <p>Le serveur va aussi essayer d'étendre sa recherche de correspondance aux
509     sous-ensembles de langages quand aucune correspondance exacte ne peut être
510     trouvée. Par exemple, si un client demande des documents possédant le
511     langage <code>en-GB</code>, c'est à dire anglais britannique, le standard
512     HTTP/1.1 n'autorise normalement pas le serveur à faire correspondre cette
513     demande à un document dont le langage est simplement <code>en</code>.
514     (Notez qu'inclure <code>en-GB</code> et non <code>en</code> dans l'en-tête
515     <code>Accept-Language</code> constitue une quasi-erreur de configuration,
516     car il est très peu probable qu'un lecteur qui comprend l'anglais
517     britannique, ne comprenne pas l'anglais en général. Malheureusement, de
518     nombreux clients ont réellement des configurations par défaut de ce type.)
519     Cependant, si aucune autre correspondance de langage n'est possible, et que le
520     serveur est sur le point de retourner une erreur "Aucune variable
521     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
522     la spécification du sous-ensemble de langage et associera la demande en
523     <code>en-GB</code> à des documents en <code>en</code>.  Implicitement,
524     httpd ajoute le langage parent à la liste de langues acceptés par le
525     client avec une valeur de qualité très basse. Notez cependant que si le
526     client demande "en-GB; q=0.9, fr; q=0.8", et le serveur dispose de
527     documents estampillés "en" et "fr", alors c'est le document "fr" qui sera
528     retourné, tout ceci dans un souci de compatibilité avec la spécification
529     HTTP/1.1 et afin de fonctionner efficacement avec les clients
530     correctement configurés.</p>
531
532     <p>Pour supporter les techniques avancées (comme les cookies ou les chemins
533     d'URL spéciaux) afin de déterminer le langage préféré de l'utilisateur, le
534     module <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> reconnaît la
535     <a href="env.html">variable d'environnement</a>
536     <code>prefer-language</code>
537     depuis la version 2.0.47 de httpd. Si elle est définie et contient un
538     symbole de langage approprié, <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> va essayer
539     de sélectionner une variante correspondante. S'il n'existe pas de telle
540     variante, le processus normal de négociation sera lancé.</p>
541
542     <div class="example"><h3>Exemple</h3><p><code>
543       SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
544       Header append Vary cookie
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 à la négociation de contenu
550 transparente</a></h2>
551
552 <p>httpd étend le protocole de négociation de contenu transparente (RFC
553 2295) comme suit. Un nouvel élément <code>{encodage ..}</code> est utilisé dans
554 les listes de variantes pour marquer celles qui ne sont disponibles qu'avec un
555 encodage de contenu spécifique. L'implémentation de l'algorithme
556 RVSA/1.0 (RFC 2296) est étendue à la reconnaissance de variantes encodées dans
557 la liste, et à leur utilisation en tant que variantes candidates à partir du
558 moment où leur encodage satisfait au contenu de l'en-tête de requête
559 <code>Accept-Encoding</code>. L'implémentation RVSA/1.0 n'arrondit pas les
560 facteurs de qualité calculés à 5 décimales avant d'avoir choisi la meilleure
561 variante.</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">Remarques à propos des liens hypertextes et des
565 conventions de nommage</a></h2>
566
567     <p>Si vous utilisez la négociation de langage, vous avez le choix entre
568     différentes conventions de nommage, car les fichiers peuvent posséder
569     plusieurs extensions, et l'ordre dans lequel ces dernières apparaissent
570     est en général sans rapport (voir la documentation sur le module <a href="mod/mod_mime.html#multipleext">mod_mime</a>
571     pour plus de détails).</p>
572
573     <p>Un fichier type possède une extension liée au type MIME
574     (<em>par exemple</em>, <code>html</code>), mais parfois aussi une
575     extension liée à l'encodage (<em>par exemple</em>, <code>gz</code>),
576     et bien sûr une extension lié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 class="bordered">
594       
595       <tr>
596         <th>Nom fichier</th>
597
598         <th>lien valide</th>
599
600         <th>Lien invalide</th>
601       </tr>
602
603       <tr>
604         <td><em>foo.html.en</em></td>
605
606         <td>foo<br />
607          foo.html</td>
608
609         <td>-</td>
610       </tr>
611
612       <tr>
613         <td><em>foo.en.html</em></td>
614
615         <td>foo</td>
616
617         <td>foo.html</td>
618       </tr>
619
620       <tr>
621         <td><em>foo.html.en.gz</em></td>
622
623         <td>foo<br />
624          foo.html</td>
625
626         <td>foo.gz<br />
627          foo.html.gz</td>
628       </tr>
629
630       <tr>
631         <td><em>foo.en.html.gz</em></td>
632
633         <td>foo</td>
634
635         <td>foo.html<br />
636          foo.html.gz<br />
637          foo.gz</td>
638       </tr>
639
640       <tr>
641         <td><em>foo.gz.html.en</em></td>
642
643         <td>foo<br />
644          foo.gz<br />
645          foo.gz.html</td>
646
647         <td>foo.html</td>
648       </tr>
649
650       <tr>
651         <td><em>foo.html.gz.en</em></td>
652
653         <td>foo<br />
654          foo.html<br />
655          foo.html.gz</td>
656
657         <td>foo.gz</td>
658       </tr>
659     </table>
660
661     <p>En regardant la table ci-dessus, vous remarquerez qu'il est toujours
662     possible d'utiliser le nom de fichier sans extension dans un lien
663     (<em>par exemple</em>, <code>foo</code>). L'avantage est de pouvoir
664     dissimuler le type réel du fichier associé à un document et de pouvoir
665     le modifier
666     ultérieurement, <em>par exemple</em>, de <code>html</code> à
667     <code>shtml</code> ou <code>cgi</code> sans avoir à
668     mettre à jour aucun lien.</p>
669
670     <p>Si vous souhaitez continuer à utiliser un type MIME dans vos liens
671     (<em>par exemple </em> <code>foo.html</code>), l'extension liée au langage
672     (y compris une extension liée à l'encodage s'il en existe une)
673     doit se trouver à droite de l'extension liée au type MIME
674     (<em>par exemple</em>, <code>foo.html.en</code>).</p>
675 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
676 <div class="section">
677 <h2><a name="caching" id="caching">Remarque sur la mise en cache</a></h2>
678
679     <p>Quand un cache stocke une représentation, il l'associe avec l'URL de la
680     requête. Lorsque cette URL est à nouveau demandée, le cache peut utiliser
681     la représentation stockée. Cependant, si la ressource est négociable au
682     niveau du serveur, il se peut que seule la première variante demandée soit
683     mise en cache et de ce fait, la correspondance positive du cache peut
684     entraîner une réponse inappropriée. Pour
685     éviter ceci, httpd marque par
686     défaut toutes les réponses qui sont retournées après une négociation de
687     contenu comme "non-cachables" par les clients HTTP/1.0. httpd supporte
688     aussi les fonctionnalités du protocole HTTP/1.1 afin de permettre la mise
689     en cache des réponses négociées.</p>
690
691     <p>Pour les requêtes en provenance d'un client compatible HTTP/1.0
692     (un navigateur ou un cache), la directive <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> peut être utilisée
693     pour permettre la mise en cache des réponses qui ont fait l'objet d'une
694     négociation. Cette directive peut intervenir dans la configuration au
695     niveau du serveur ou de l'hôte virtuel, et n'accepte aucun argument. Elle
696     n'a aucun effet sur les requêtes en provenance de clients HTTP/1.1.</p>
697
698     <p>Pour les clients HTTP/1.1, httpd envoie un en-tête de réponse HTTP
699     <code>Vary</code> afin d'indiquer les dimensions de la négociation pour
700     cette réponse. Les caches peuvent
701     utiliser cette information afin de déterminer
702     si une requête peut être servie à partir de la copie locale. Pour inciter
703     un cache à utiliser la copie locale sans tenir compte des dimensions de la
704     négociation, définissez la
705     <a href="env.html#special">variable d'environnement</a>
706     <code>force-no-vary</code>.</p>
707
708 </div></div>
709 <div class="bottomlang">
710 <p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
711 <a href="./fr/content-negotiation.html" title="Français">&nbsp;fr&nbsp;</a> |
712 <a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
713 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
714 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
715 </div><div id="footer">
716 <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>
717 <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><script type="text/javascript">
718     if (typeof(prettyPrint) !== undefined) {
719         prettyPrint();
720     }
721 </script>
722 </body></html>