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