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="<-" alt="<-" src="./images/left.gif" /></a></div> 23<div id="path"> 24<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.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"> en </a> | 27<a href="./fr/content-negotiation.html" title="Français"> fr </a> | 28<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 29<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 30<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </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"><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 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"> en </a> | 714<a href="./fr/content-negotiation.html" title="Français"> fr </a> | 715<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 716<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 717<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </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&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>