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