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 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">
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="<-" alt="<-" src="./images/left.gif" /></a></div>
22 <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.5</a></div><div id="page-content"><div id="preamble"><h1>Négociation de contenu</h1>
24 <p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="./fr/content-negotiation.html" title="Français"> fr </a> |
26 <a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
27 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
28 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
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>
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
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
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>
55 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
57 <h2><a name="about" id="about">À propos de la négociation de contenu</a></h2>
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>
73 <div class="example"><p><code>Accept-Language: fr</code></p></div>
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
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>
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
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>
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>
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>
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>
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>
133 <h3><a name="type-map" id="type-map">Utilisation d'un fichier de
134 correspondances de types (type-map)</a></h3>
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>
145 <div class="example"><p><code>AddHandler type-map .var</code></p></div>
147 <p>dans le fichier de configuration du serveur.</p>
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>
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
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>
172 <div class="example"><p><code>
175 URI: foo.en.html<br />
176 Content-type: text/html<br />
177 Content-language: en<br />
179 URI: foo.fr.de.html<br />
180 Content-type: text/html;charset=iso-8859-2<br />
181 Content-language: fr, de<br />
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
189 (disponible aux formats JPEG, GIF, ou ASCII-art) : </p>
191 <div class="example"><p><code>
195 Content-type: image/jpeg; qs=0.8<br />
198 Content-type: image/gif; qs=0.5<br />
201 Content-type: text/plain; qs=0.01<br />
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>
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>
221 <h3><a name="multiviews" id="multiviews">Multivues (option Multiviews)</a></h3>
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"><Directory></a></code>, <code class="directive"><a href="./mod/core.html#location"><Location></a></code> ou <code class="directive"><a href="./mod/core.html#files"><Files></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
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>
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>
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>
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
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>
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>
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>
276 <p>Il existe deux méthodes de négociation :</p>
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
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>
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>
298 <h3><a name="dimensions" id="dimensions">Les dimensions de la négociation</a></h3>
309 <td>Type de média</td>
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>
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>
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
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>
345 <h3><a name="algorithm" id="algorithm">L'algorithme de négociation de
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>
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>
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
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>
373 <li>Sélectionner les variantes qui possèdent le facteur de qualité
374 de langage le plus haut.</li>
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>
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>
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>
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>
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>
404 <li>Sélectionner les variantes dont le contenu a la longueur
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>
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>
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>
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>
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>
444 <h3><a name="wildcards" id="wildcards">Types de média et caractères génériques</a></h3>
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>
451 <div class="example"><p><code>Accept: image/*, */*</code></p></div>
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.
459 <div class="example"><p><code>
460 Accept: text/html, text/plain, image/gif, image/jpeg, */*
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
467 <div class="example"><p><code>
468 Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
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
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>
488 <h3><a name="exceptions" id="exceptions">Exceptions dans la négociation du
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>
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".
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>
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>
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>
542 <div class="example"><h3>Exemple</h3><p><code>
543 SetEnvIf Cookie "language=(.+)" prefer-language=$1<br />
544 Header append Vary cookie
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>
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
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>
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>
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>
587 <li>foo.en.html.gz</li>
590 <p>Ci-dessous d'autres exemples de noms de fichiers avec des liens
591 hypertextes valides et invalides :</p>
593 <table class="bordered">
600 <th>Lien invalide</th>
604 <td><em>foo.html.en</em></td>
613 <td><em>foo.en.html</em></td>
621 <td><em>foo.html.en.gz</em></td>
631 <td><em>foo.en.html.gz</em></td>
641 <td><em>foo.gz.html.en</em></td>
651 <td><em>foo.html.gz.en</em></td>
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
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>
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>
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>
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>
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>
709 <div class="bottomlang">
710 <p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> |
711 <a href="./fr/content-negotiation.html" title="Français"> fr </a> |
712 <a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
713 <a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
714 <a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </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) {