1<?xml version="1.0" encoding="ISO-8859-1"?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!-- 4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5 This file is generated from xml source: DO NOT EDIT 6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 --> 8<title>mod_proxy_ajp - 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.min.js" type="text/javascript"> 13</script> 14 15<link href="/images/favicon.ico" rel="shortcut icon" /></head> 16<body> 17<div id="page-header"> 18<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> 19<p class="apache">Serveur Apache HTTP Version 2.4</p> 20<img alt="" src="/images/feather.gif" /></div> 21<div class="up"><a href="./"><img title="<-" alt="<-" src="/images/left.gif" /></a></div> 22<div id="path"> 23<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> > <a href="./">Modules</a></div> 24<div id="page-content"> 25<div id="preamble"><h1>Module Apache mod_proxy_ajp</h1> 26<div class="toplang"> 27<p><span>Langues Disponibles: </span><a href="/en/mod/mod_proxy_ajp.html" hreflang="en" rel="alternate" title="English"> en </a> | 28<a href="/fr/mod/mod_proxy_ajp.html" title="Fran�ais"> fr </a> | 29<a href="/ja/mod/mod_proxy_ajp.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> 30</div> 31<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Module de support AJP pour 32<code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code></td></tr> 33<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr> 34<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur�de�Module:</a></th><td>proxy_ajp_module</td></tr> 35<tr><th><a href="module-dict.html#SourceFile">Fichier�Source:</a></th><td>mod_proxy_ajp.c</td></tr> 36<tr><th><a href="module-dict.html#Compatibility">Compatibilit�:</a></th><td>Disponible depuis la version 2.1 d'Apache</td></tr></table> 37<h3>Sommaire</h3> 38 39 <p>Ce module n�cessite le chargement de <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>. Il fournit le support du <code>Protocole Apache 40 JServ version 1.3</code> (nomm� dans la suite de ce document 41 <em>AJP13</em>).</p> 42 43 <p>Pour �tre en mesure d'exploiter le protocole <code>AJP13</code>, 44 il est donc n�cessaire de charger les modules 45 <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code> et <code class="module"><a href="/mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>.</p> 46 47 <div class="warning"><h3>Avertissement</h3> 48 <p>N'activez pas la fonctionnalit� de mandataire avant d'avoir <a href="mod_proxy.html#access">s�curis� votre serveur</a>. Les 49 serveurs mandataires ouverts sont dangereux non seulement pour 50 votre r�seau, mais aussi pour l'Internet au sens large. </p> 51 </div> 52</div> 53<div id="quickview"><h3 class="directives">Directives</h3> 54<p>Ce module ne fournit aucune directive.</p> 55<h3>Sujets</h3> 56<ul id="topics"> 57<li><img alt="" src="/images/down.gif" /> <a href="#usage">Utilisation</a></li> 58<li><img alt="" src="/images/down.gif" /> <a href="#env">Variables d'environnement</a></li> 59<li><img alt="" src="/images/down.gif" /> <a href="#overviewprotocol">Vue d'ensemble du protocole</a></li> 60<li><img alt="" src="/images/down.gif" /> <a href="#basppacketstruct">Structure de base des paquets</a></li> 61<li><img alt="" src="/images/down.gif" /> <a href="#rpacetstruct">Structure des paquets de 62requ�te</a></li> 63<li><img alt="" src="/images/down.gif" /> <a href="#resppacketstruct">Structure du paquet de la 64r�ponse</a></li> 65</ul><h3>Voir aussi</h3> 66<ul class="seealso"> 67<li><code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code></li> 68<li><a href="/env.html">Documentation sur les variables 69d'environnement</a></li> 70</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> 71<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 72<div class="section"> 73<h2><a name="usage" id="usage">Utilisation</a></h2> 74 <p>Ce module permet de mandater en inverse un serveur d'application 75 d'arri�re-plan (comme Apache Tomcat) qui utilise le protocole AJP13. 76 Son utilisation est similaire � celle d'un mandataire inverse HTTP, 77 mais s'appuie sur le prefixe <code>ajp://</code> :</p> 78 79 <div class="example"><h3>Mandataire inverse simple</h3><pre class="prettyprint lang-config">ProxyPass /app ajp://backend.example.com:8009/app</pre> 80</div> 81 82 <p>On peut aussi configurer un r�partiteur de charge :</p> 83 <div class="example"><h3>Mandataire inverse avec r�partiteur de charge</h3><pre class="prettyprint lang-config"><Proxy balancer://cluster> 84 BalancerMember ajp://app1.example.com:8009 loadfactor=1 85 BalancerMember ajp://app2.example.com:8009 loadfactor=2 86 ProxySet lbmethod=bytraffic 87</Proxy> 88ProxyPass /app balancer://cluster/app</pre> 89</div> 90 91 <p>Notez qu'en g�n�ral, la directive <code class="directive"><a href="/mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> n'est pas 92 n�cessaire. La requ�te AJP inclut l'en-t�te host original fourni 93 au mandataire, et le serveur d'application est sens� g�n�rer des 94 en-t�tes auto-r�f�ren�ants relatifs � cet h�te ; aucune r��criture 95 n'est donc n�cessaire.</p> 96 97 <p>La situation la plus courante dans laquelle la directive <code class="directive"><a href="/mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> est n�cessaire se 98 rencontre lorsque le chemin de l'URL au niveau du mandataire est 99 diff�rente de celle du serveur d'arri�re-plan. Dans ce cas, un 100 en-t�te redirect peut �tre r��crit relativement � l'URL de l'h�te 101 original (et non du serveur d'arri�re-plan <code>ajp://</code> URL) 102 ; par exemple :</p> 103 <div class="example"><h3>R��criture d'un chemin mandat�</h3><pre class="prettyprint lang-config">ProxyPass /apps/foo ajp://backend.example.com:8009/foo 104ProxyPassReverse /apps/foo http://www.example.com/foo</pre> 105</div> 106 <p>Il est cependant pr�f�rable en g�n�ral de d�ployer l'application 107 sur le serveur d'arri�re-plan avec le m�me chemin que sur le 108 mandataire. 109 </p> 110</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 111<div class="section"> 112<h2><a name="env" id="env">Variables d'environnement</a></h2> 113 <p>Les variables d'environnement dont le nom poss�de le pr�fixe 114 <code>AJP_</code> sont transmises au serveur original en tant 115 qu'attributs de requ�te AJP (le pr�fixe AJP_ �tant supprim� du nom 116 de la cl�).</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="overviewprotocol" id="overviewprotocol">Vue d'ensemble du protocole</a></h2> 120 <p>Le protocole <code>AJP13</code> est orient� paquet. Le format 121 binaire a �t� pr�f�r�, probablement pour des raisons de 122 performances, au format texte pourtant plus lisible. Le serveur web 123 communique avec le conteneur de servlets sur une connexion TCP. Pour 124 diminuer la charge induite par le processus de cr�ation de socket, 125 le serveur web va tenter d'utiliser des connexions TCP persistantes 126 avec le conteneur de servlets, et de r�utiliser les connexions 127 pendant plusieurs cycles requ�tes/r�ponse.</p> 128 <p>Lorsqu'une connexion a �t� assign�e � une requ�te particuli�re, 129 elle ne sera utilis�e pour aucune autre jusqu'� ce que le cycle de 130 traitement de la requ�te se soit termin�. En d'autres termes, il n'y 131 a pas de multiplexage des requ�tes sur une connexion. Ceci se 132 traduit par un code beaucoup plus simple � chaque extr�mit� de la 133 connexion, un nombre plus important de connexions �tant cependant 134 ouvertes en m�me temps.</p> 135 <p>Lorsque le serveur web a ouvert une connexion vers le conteneur 136 de servlets, celle-ci peut se trouver dans l'un des �tats suivants 137 :</p> 138 <ul> 139 <li> Idle <br /> Aucune requ�te n'est trait�e sur cette 140 connexion. </li> 141 <li> Assigned <br /> La connexion fait l'objet d'un traitement de 142 requ�te.</li> 143 </ul> 144 <p>Lorsqu'une connexion est assign�e au traitement d'une requ�te 145 particuli�re, les informations de base de cette derni�re (comme les 146 en-t�tes HTTP, etc...) sont envoy�es sur la connexion sous une forme 147 tr�s condens�e (par exemple les cha�nes courantes sont cod�es sous 148 forme d'entiers). Vous trouverez des d�tails sur ce format plus 149 loin dans la structure des paquets de requ�te. Si la requ�te poss�de 150 un corps <code>(content-length > 0)</code>, il est envoy� dans un 151 paquet s�par� imm�diatement apr�s.</p> 152 <p>A ce moment, le conteneur est probablement pr�t � traiter la 153 requ�te. Au cours de ce traitement, il peut renvoyer les messages 154 suivants au serveur web :</p> 155 <ul> 156 <li>SEND_HEADERS <br />Renvoie un jeu d'en-t�tes au navigateur.</li> 157 <li>SEND_BODY_CHUNK <br />Renvoie un tron�on de corps de requ�te au 158 navigateur. 159 </li> 160 <li>GET_BODY_CHUNK <br />Re�oit un autre tron�on de donn�es de la 161 requ�te si elle n'a pas encore �t� transmise int�gralement. Ce type 162 de transmission est n�cessaire car les paquets poss�dent une taille 163 maximale fixe, et des quantit�s quelconques de donn�es peuvent �tre 164 contenues dans le corps de la requ�te (pour un chargement de 165 fichier, par exemple). Notez que cela n'a rien � voir avec le 166 transfert HTTP fractionn�.</li> 167 <li>END_RESPONSE <br /> Termine le cycle du traitement de la 168 requ�te.</li> 169 </ul> 170 <p>Chaque message est associ� � un paquet de donn�es format� 171 diff�remment. Voir plus loin les structures des paquets de r�ponses 172 pour plus de d�tails.</p> 173</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 174<div class="section"> 175<h2><a name="basppacketstruct" id="basppacketstruct">Structure de base des paquets</a></h2> 176 <p>Ce protocole h�rite en partie de XDR, mais il diff�re sur de 177 nombreux points (pas d'alignement sur 4 bits, par exemple).</p> 178 <p>Ordre des octets : je ne suis pas s�r du type endian des octets 179 individuels. Je suppose qu'ils sont de type little-endian, car cela 180 correspond � la sp�cification XDR, et je suppose aussi que la 181 biblioth�que sys/socket fonctionne ainsi automatiquement (du point 182 de vue du langage C). Il serait souhaitable que quelqu'un poss�dant 183 une meilleure connaissance des appels socket puisse prendre le 184 relai.</p> 185 <p>Le protocole comporte quatre types de donn�es : octets, bool�ens, 186 entiers et cha�nes de caract�res.</p> 187 <dl> 188 <dt><strong>Octet</strong></dt><dd>Un seul octet.</dd> 189 <dt><strong>Bool�en</strong></dt> 190 <dd>Un seul octet, <code>1 = vrai</code>, <code>0 = faux</code>. 191 L'utilisation d'autres valeurs non nulles (dans le style C) peut 192 fonctionner dans certains cas, mais pas dans certains autres..</dd> 193 <dt><strong>Entier</strong></dt> 194 <dd>Un nombre compris entre <code>0 et 2^16 (32768)</code>, stock� 195 sur 2 octets en d�butant par l'octet de poids forts.</dd> 196 <dt><strong>Cha�ne</strong></dt> 197 <dd>Une cha�ne de taille variable (longueur limit�e � 2^16). Elle 198 est cod�e comme suit : les deux premiers octets repr�sentent la 199 longueur de la cha�ne, les octets suivants constituent la cha�ne 200 proprement dite (y compris le '\0' final). Notez que la longueur 201 encod�e dans les deux premiers octets ne prend pas en compte le 202 '\0' final, de la m�me mani�re que <code>strlen</code>. Cela peut 203 pr�ter � confusion du point de vue de Java qui est surcharg� de 204 d�clarations d'autoincr�mentation �tranges destin�es � traiter 205 ces terminateurs. Je suppose que le but dans lequel cela a 206 �t� con�u ainsi �tait de permettre au code C d'�tre plus efficace 207 lors de la lecture de cha�nes en provenance du conteneur de 208 servlets -- avec le caract�re \0 final, le code C peut transmettre 209 des r�f�rences dans un seul tampon, sans avoir � effectuer de 210 copie. En l'absence du caract�re \0 final, le code C doit 211 effectuer une copie afin de pouvoir tenir compte de sa notion de 212 cha�ne.</dd> 213 </dl> 214 215 <h3>Taille du paquet</h3> 216 <p>Selon la majorit� du code, la taille maximale du paquet est de 217 <code>8 * 1024 bytes (8K)</code>. La taille r�elle du paquet est 218 encod�e dans l'en-t�te.</p> 219 220 <h3>En-t�tes de paquet</h3> 221 <p>Les paquets envoy�s par le serveur vers le conteneur commencent 222 par <code>0x1234</code>. Les paquets envoy�s par le conteneur vers 223 le serveur commencent par <code>AB</code> (c'est � dire le code 224 ASCII de A suivi du code ASCII de B). Ensuite, vient un entier (cod� 225 comme ci-dessus) repr�sentant la longueur des donn�es transmises. 226 Bien que ceci puisse faire croire que la taille maximale des donn�es 227 est de 2^16, le code d�finit en fait ce maximum � 8K.</p> 228 <table> 229 230 <tr> 231 <th colspan="6"><em>Format du paquet (Serveur->Conteneur)</em></th> 232 </tr> 233 <tr> 234 <th>Octet</th> 235 <td>0</td> 236 <td>1</td> 237 <td>2</td> 238 <td>3</td> 239 <td>4...(n+3)</td> 240 </tr> 241 <tr> 242 <th>Contenu</th> 243 <td>0x12</td> 244 <td>0x34</td> 245 <td colspan="2">Taille des donn�es (n)</td> 246 <td>Data</td> 247 </tr> 248 </table> 249 <table> 250 251 <tr> 252 <th colspan="6"><em>Format du paquet 253 (Conteneur->Serveur)</em></th> 254 </tr> 255 <tr> 256 <th>Octet</th> 257 <td>0</td> 258 <td>1</td> 259 <td>2</td> 260 <td>3</td> 261 <td>4...(n+3)</td> 262 </tr> 263 <tr> 264 <th>Contenu</th> 265 <td>A</td> 266 <td>B</td> 267 <td colspan="2">Taille des donn�es (n)</td> 268 <td>Data</td> 269 </tr> 270 </table> 271 <p>Pour la plupart des paquets, le premier octet de la charge utile 272 encode le type de message, � l'exception des paquets contenant un 273 corps de requ�te envoy�s du serveur vers le conteneur -- ils 274 comportent un en-t�te standard (<code>0x1234</code> suivi de la taille 275 du paquet), mais celui-ci n'est suivi d'aucun pr�fixe.</p> 276 <p>Le serveur web peut envoyer les messages suivants au conteneur 277 de servlets :</p> 278 <table> 279 280 <tr> 281 <td>Code</td> 282 <td>Type de paquet</td> 283 <td>Signification</td> 284 </tr> 285 <tr> 286 <td>2</td> 287 <td>Fait suivre la requ�te</td> 288 <td>D�bute le cycle de traitement de la requ�te avec les donn�es 289 qui suivent.</td> 290 </tr> 291 <tr> 292 <td>7</td> 293 <td>Arr�t</td> 294 <td>Le serveur web demande au conteneur de s'arr�ter.</td> 295 </tr> 296 <tr> 297 <td>8</td> 298 <td>Ping</td> 299 <td>Le serveur web demande au conteneur de prendre le contr�le 300 (phase de connexion s�curis�e).</td> 301 </tr> 302 <tr> 303 <td>10</td> 304 <td>CPing</td> 305 <td>Le serveur web demande au conteneur de r�pondre rapidement 306 avec un CPong. 307 </td> 308 </tr> 309 <tr> 310 <td>none</td> 311 <td>Donn�es</td> 312 <td>Taille (2 octets) et les donn�es correspondantes.</td> 313 </tr> 314 </table> 315 <p>� des fins de s�curit�, le conteneur n'effectuera r�ellement son 316 <code>Arr�t</code> que si la demande provient de la machine par 317 laquelle il est h�berg�.</p> 318 <p>Le premier paquet <code>Donn�es</code> est envoy� imm�diatement 319 apr�s le paquet <code>Faire suivre la requ�te</code> par le serveur 320 web.</p> 321 <p>Le conteneur de servlets peut envoyer les types de messages 322 suivants au serveur web :</p> 323 <table> 324 325 <tr> 326 <td>Code</td> 327 <td>Type de paquet</td> 328 <td>Signification</td> 329 </tr> 330 <tr> 331 <td>3</td> 332 <td>Envoi d'un tron�on de corps</td> 333 <td>Envoi d'un tron�on de corps depuis le conteneur de servlets 334 vers le serveur web (et probablement vers le navigateur).</td> 335 </tr> 336 <tr> 337 <td>4</td> 338 <td>Envoie les en-t�tes</td> 339 <td>Envoi des en-t�tes de r�ponse depuis le conteneur de 340 servlets vers le serveur web (et probablement vers le 341 navigateur).</td> 342 </tr> 343 <tr> 344 <td>5</td> 345 <td>Fin de la r�ponse</td> 346 <td>Marque la fin de la r�ponse (et par cons�quent du cycle de 347 traitement de la requ�te). 348 </td> 349 </tr> 350 <tr> 351 <td>6</td> 352 <td>R�ception du tron�on de corps suivant</td> 353 <td>R�ception de la suite des donn�es de la requ�te si elles 354 n'ont pas encore �t� enti�rement transmises.</td> 355 </tr> 356 <tr> 357 <td>9</td> 358 <td>R�ponse CPong</td> 359 <td>La r�ponse � une requ�te CPing</td> 360 </tr> 361 </table> 362 <p>Chacun des messages ci-dessus poss�de une structure interne 363 diff�rente dont vous trouverez les d�tails ci-dessous.</p> 364 365</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 366<div class="section"> 367<h2><a name="rpacetstruct" id="rpacetstruct">Structure des paquets de 368requ�te</a></h2> 369 <p>Pour les messages de type <em>Faire suivre la requ�te</em> depuis 370 le serveur vers le conteneur :</p> 371 <div class="example"><pre>AJP13_FORWARD_REQUEST := 372 prefix_code (byte) 0x02 = JK_AJP13_FORWARD_REQUEST 373 method (byte) 374 protocol (string) 375 req_uri (string) 376 remote_addr (string) 377 remote_host (string) 378 server_name (string) 379 server_port (integer) 380 is_ssl (boolean) 381 num_headers (integer) 382 request_headers *(req_header_name req_header_value) 383 attributes *(attribut_name attribute_value) 384 request_terminator (byte) OxFF</pre></div> 385 <p>Les <code>request_headers</code> poss�dent la structure suivante 386 : 387 </p><div class="example"><pre>req_header_name := 388 sc_req_header_name | (string) [voir ci-dessous pour la mani�re dont 389 ceci est interpr�t�] 390 391sc_req_header_name := 0xA0xx (integer) 392 393req_header_value := (string)</pre></div> 394 <p>Les <code>attributes</code> sont optionnels et poss�dent la 395 structure suivante :</p> 396 <div class="example"><pre>attribute_name := sc_a_name | (sc_a_req_attribute string) 397 398attribute_value := (string)</pre></div> 399 <p>Un des en-t�tes les plus importants est 400 <code>content-length</code>, car il indique si le conteneur doit ou 401 non attendre un autre paquet imm�diatement.</p> 402 <h3>Description d�taill�e de la requ�te que le serveur 403 fait suivre vers le conteneur 404 </h3> 405 <h3>Pr�fixe de la requ�te</h3> 406 <p>Pour toutes les requ�tes, ce pr�fixe est 2. Voir ci-dessus pour 407 les d�tails des autres codes de pr�fixes.</p> 408 409 <h3>M�thode</h3> 410 <p>La m�thode HTTP, encod�e sous la forme d'un seul octet :</p> 411 <table> 412 <tr><td>Nom commande</td><td>Code</td></tr> 413 <tr><td>OPTIONS</td><td>1</td></tr> 414 <tr><td>GET</td><td>2</td></tr> 415 <tr><td>HEAD</td><td>3</td></tr> 416 <tr><td>POST</td><td>4</td></tr> 417 <tr><td>PUT</td><td>5</td></tr> 418 <tr><td>DELETE</td><td>6</td></tr> 419 <tr><td>TRACE</td><td>7</td></tr> 420 <tr><td>PROPFIND</td><td>8</td></tr> 421 <tr><td>PROPPATCH</td><td>9</td></tr> 422 <tr><td>MKCOL</td><td>10</td></tr> 423 <tr><td>COPY</td><td>11</td></tr> 424 <tr><td>MOVE</td><td>12</td></tr> 425 <tr><td>LOCK</td><td>13</td></tr> 426 <tr><td>UNLOCK</td><td>14</td></tr> 427 <tr><td>ACL</td><td>15</td></tr> 428 <tr><td>REPORT</td><td>16</td></tr> 429 <tr><td>VERSION-CONTROL</td><td>17</td></tr> 430 <tr><td>CHECKIN</td><td>18</td></tr> 431 <tr><td>CHECKOUT</td><td>19</td></tr> 432 <tr><td>UNCHECKOUT</td><td>20</td></tr> 433 <tr><td>SEARCH</td><td>21</td></tr> 434 <tr><td>MKWORKSPACE</td><td>22</td></tr> 435 <tr><td>UPDATE</td><td>23</td></tr> 436 <tr><td>LABEL</td><td>24</td></tr> 437 <tr><td>MERGE</td><td>25</td></tr> 438 <tr><td>BASELINE_CONTROL</td><td>26</td></tr> 439 <tr><td>MKACTIVITY</td><td>27</td></tr> 440 </table> 441 <p>Les versions futures d'ajp13 pourront transmettre des m�thodes 442 suppl�mentaires, m�me si elles ne font pas partie de cette 443 liste.</p> 444 445 <h3>protocol, req_uri, remote_addr, remote_host, server_name, 446 server_port, is_ssl</h3> 447 <p>Les significations de ces �l�ments sont triviales. Ils sont tous 448 obligatoires et seront envoy�s avec chaque requ�te.</p> 449 450 <h3>En-t�tes</h3> 451 <p>La structure de <code>request_headers</code> est la suivante 452 : tout d'abord, le nombre d'en-t�tes <code>num_headers</code> est 453 encod�, suivi d'une liste de paires nom d'en-t�te 454 <code>req_header_name</code> / valeur <code>req_header_value</code>. 455 Les noms d'en-t�tes courants sont cod�s sous forme d'entiers afin de 456 gagner de la place. Si le nom d'en-t�te ne fait partie de la liste 457 des en-t�tes courants, il est encod� normalement (une cha�ne de 458 caract�res pr�fix�e par la taille). La liste des en-t�tes courants 459 <code>sc_req_header_name</code> avec leurs codes se pr�sente comme 460 suit (il sont tous sensibles � la casse) :</p> 461 <table> 462 <tr><td>Nom</td><td>Valeur du code</td><td>Nom du code</td></tr> 463 <tr><td>accept</td><td>0xA001</td><td>SC_REQ_ACCEPT</td></tr> 464 <tr><td>accept-charset</td><td>0xA002</td><td>SC_REQ_ACCEPT_CHARSET 465 </td></tr> 466 <tr><td>accept-encoding</td><td>0xA003</td><td>SC_REQ_ACCEPT_ENCODING 467 </td></tr> 468 <tr><td>accept-language</td><td>0xA004</td><td>SC_REQ_ACCEPT_LANGUAGE 469 </td></tr> 470 <tr><td>authorization</td><td>0xA005</td><td>SC_REQ_AUTHORIZATION</td> 471 </tr> 472 <tr><td>connection</td><td>0xA006</td><td>SC_REQ_CONNECTION</td></tr> 473 <tr><td>content-type</td><td>0xA007</td><td>SC_REQ_CONTENT_TYPE</td> 474 </tr> 475 <tr><td>content-length</td><td>0xA008</td><td>SC_REQ_CONTENT_LENGTH</td> 476 </tr> 477 <tr><td>cookie</td><td>0xA009</td><td>SC_REQ_COOKIE</td></tr> 478 <tr><td>cookie2</td><td>0xA00A</td><td>SC_REQ_COOKIE2</td></tr> 479 <tr><td>host</td><td>0xA00B</td><td>SC_REQ_HOST</td></tr> 480 <tr><td>pragma</td><td>0xA00C</td><td>SC_REQ_PRAGMA</td></tr> 481 <tr><td>referer</td><td>0xA00D</td><td>SC_REQ_REFERER</td></tr> 482 <tr><td>user-agent</td><td>0xA00E</td><td>SC_REQ_USER_AGENT</td></tr> 483 </table> 484 <p>Le code Java qui lit ceci extrait l'entier repr�sent� par les 485 deux premiers octets, et si le premier octet est 486 <code>'0xA0'</code>, il utilise l'entier repr�sent� par le deuxi�me 487 octet comme index d'un tableau de noms d'en-t�tes. Si le premier 488 octet n'est pas <code>0xA0</code>, l'entier repr�sent� par les deux 489 octets est consid�r� comme la longueur d'une cha�ne qui est alors 490 lue.</p> 491 <p>Ceci ne peut fonctionner que si aucun nom d'en-t�te ne poss�de 492 une taille sup�rieure � <code>0x9999 (==0xA000 - 1)</code>, ce qui 493 est vraisemblable, bien qu'un peu arbitraire.</p> 494 <div class="note"><h3>Note:</h3> 495 L'en-t�te <code>content-length</code> est extr�mement important. 496 S'il est pr�sent et non nul, le conteneur consid�re que la requ�te 497 poss�de un corps (une requ�te POST, par exemple), et lit 498 imm�diatement le paquet suivant dans le flux d'entr�e pour extraire 499 ce corps. 500 </div> 501 502 <h3>Attributs</h3> 503 <p>Les attributs pr�fix�s par <code>?</code> (par exemple 504 <code>?context</code>) sont tous optionnels. Chacun d'eux est 505 repr�sent� par un octet correspondant au type de l'attribut et par 506 sa valeur (cha�ne ou entier). Ils peuvent �tre envoy�s dans un ordre 507 quelconque (bien que le code C les envoie dans l'ordre ci-dessous). 508 Un code de terminaison sp�cial est envoy� pour signaler la fin de la 509 liste des attributs optionnels. La liste des codes est la suivante 510 :</p> 511 <table> 512 <tr><td>Information</td><td>Valeur code</td><td>Type de valeur</td><td>Note</td></tr> 513 <tr><td>?context</td><td>0x01</td><td>-</td><td>Non impl�ment� 514 actuellement 515 </td></tr> 516 <tr><td>?servlet_path</td><td>0x02</td><td>-</td><td>Non impl�ment� 517 actuellement 518 </td></tr> 519 <tr><td>?remote_user</td><td>0x03</td><td>String</td><td /></tr> 520 <tr><td>?auth_type</td><td>0x04</td><td>String</td><td /></tr> 521 <tr><td>?query_string</td><td>0x05</td><td>String</td><td /></tr> 522 <tr><td>?jvm_route</td><td>0x06</td><td>String</td><td /></tr> 523 <tr><td>?ssl_cert</td><td>0x07</td><td>String</td><td /></tr> 524 <tr><td>?ssl_cipher</td><td>0x08</td><td>String</td><td /></tr> 525 <tr><td>?ssl_session</td><td>0x09</td><td>String</td><td /></tr> 526 <tr><td>?req_attribute</td><td>0x0A</td><td>String</td><td>Nom (le 527 nom de l'attribut vient ensuite)</td></tr> 528 <tr><td>?ssl_key_size</td><td>0x0B</td><td>Integer</td><td /></tr> 529 <tr><td>are_done</td><td>0xFF</td><td>-</td><td>request_terminator</td></tr> 530 </table> 531 <p><code>context</code> et <code>servlet_path</code> ne sont pas 532 d�finis actuellement par le code C, et la majorit� du code Java 533 ignore compl�tement ce qui est envoy� par l'interm�diaire de ces 534 champs (il va m�me parfois s'interrompre si une cha�ne est 535 envoy�e apr�s un de ces codes). Je ne sais pas si c'est une bogue ou 536 une fonctionnalit� non impl�ment�e, ou tout simplement du code 537 obsol�te, mais en tout cas, il n'est pris en charge par aucune des 538 deux extr�mit�s de la connexion.</p> 539 <p><code>remote_user</code> et <code>auth_type</code> concernent 540 probablement l'authentification au niveau HTTP, et contiennent le 541 nom de l'utilisateur distant ainsi que le type d'authentification 542 utilis�e pour �tablir son identit� (� savoir Basic, Digest).</p> 543 <p><code>query_string</code>, <code>ssl_cert</code>, 544 <code>ssl_cipher</code> et <code>ssl_session</code> contiennent les 545 �l�ments HTTP et HTTPS correspondants.</p> 546 <p><code>jvm_route</code> est utilis� dans le cadre des sessions 547 persistantes, en associant une session utilisateur � une instance 548 Tomcat particuli�re en pr�sence de plusieurs r�partiteurs de 549 charge.</p> 550 <p>Au del� de cette liste de base, tout autre attribut 551 suppl�mentaire peut �tre envoy� via le code 552 <code>req_attribute</code> <code>0x0A</code>. Une paire de cha�nes 553 repr�sentant le nom et la valeur de l'attribut est envoy�e 554 imm�diatement apr�s chaque instance de ce code. Les variables 555 d'environnement sont transmises par cette m�thode.</p> 556 <p>Enfin, lorsque tous les attributs ont �t� transmis, le 557 terminateur d'attributs, <code>0xFF</code>, est envoy�. Ce dernier 558 indique � la fois la fin de la liste d'attributs et la fin du paquet 559 de la requ�te</p> 560 561</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 562<div class="section"> 563<h2><a name="resppacketstruct" id="resppacketstruct">Structure du paquet de la 564r�ponse</a></h2> 565 <p>Pour les messages que le conteneur peut renvoyer au 566 serveur.</p> 567 <div class="example"><pre>AJP13_SEND_BODY_CHUNK := 568 prefix_code 3 569 chunk_length (integer) 570 chunk *(byte) 571 chunk_terminator (byte) Ox00 572 573 574AJP13_SEND_HEADERS := 575 prefix_code 4 576 http_status_code (integer) 577 http_status_msg (string) 578 num_headers (integer) 579 response_headers *(res_header_name header_value) 580 581res_header_name := 582 sc_res_header_name | (string) [voir ci-dessous pour la mani�re 583 dont ceci est interpr�t�] 584 585sc_res_header_name := 0xA0 (byte) 586 587header_value := (string) 588 589AJP13_END_RESPONSE := 590 prefix_code 5 591 reuse (boolean) 592 593 594AJP13_GET_BODY_CHUNK := 595 prefix_code 6 596 requested_length (integer)</pre></div> 597 <h3>D�tails:</h3> 598 <h3>Envoi d'un tron�on de corps</h3> 599 <p>Le tron�on se compose essentiellement de donn�es binaires et est 600 renvoy� directement au navigateur.</p> 601 602 <h3>Envoi des en-t�tes</h3> 603 <p>Les code et message d'�tat correspondent aux code et message HTTP 604 habituels (par exemple <code>200</code> et <code>OK</code>). Les 605 noms d'en-t�tes de r�ponses sont cod�s de la m�me fa�on que les noms 606 d'en-t�tes de requ�tes. Voir ci-dessus le codage des en-t�tes pour 607 plus de d�tails � propos de la mani�re dont les codes se distinguent 608 des cha�nes.<br /> 609 Les codes des en-t�tes courants sont ::</p> 610 <table> 611 <tr><td>Nom</td><td>Valeur code</td></tr> 612 <tr><td>Content-Type</td><td>0xA001</td></tr> 613 <tr><td>Content-Language</td><td>0xA002</td></tr> 614 <tr><td>Content-Length</td><td>0xA003</td></tr> 615 <tr><td>Date</td><td>0xA004</td></tr> 616 <tr><td>Last-Modified</td><td>0xA005</td></tr> 617 <tr><td>Location</td><td>0xA006</td></tr> 618 <tr><td>Set-Cookie</td><td>0xA007</td></tr> 619 <tr><td>Set-Cookie2</td><td>0xA008</td></tr> 620 <tr><td>Servlet-Engine</td><td>0xA009</td></tr> 621 <tr><td>Status</td><td>0xA00A</td></tr> 622 <tr><td>WWW-Authenticate</td><td>0xA00B</td></tr> 623 </table> 624 <p>La valeur de l'en-t�te est cod�e imm�diatement apr�s le code ou 625 la cha�ne du nom d'en-t�te.</p> 626 627 <h3>Fin de la r�ponse</h3> 628 <p>Signale la fin de ce cycle de traitement de requ�te. Si le 629 drapeau <code>reuse</code> est � true <code>(==1)</code>, cette 630 connexion TCP peut �tre r�utilis�e pour traiter de nouvelles 631 requ�tes entrantes. Si <code>reuse</code> est � false (toute autre 632 valeur que 1 dans le v�ritable code C), la connexion sera 633 ferm�e.</p> 634 635 <h3>R�ception d'un tron�on de corps</h3> 636 <p>Le conteneur r�clame la suite des donn�es de la requ�te (dans le 637 cas o� la taille du corps �tait trop importante pour pouvoir �tre 638 contenue dans le premier paquet envoy�, o� lorsque la requ�te est 639 fractionn�e). Le serveur va alors envoyer un paquet contenant une 640 quantit� de donn�es correspondant au minimum de la 641 <code>request_length</code>, la taille maximale de corps envoy�e 642 <code>(8186 (8 Koctets - 6))</code>, et le nombre r�el d'octets 643 restants � envoyer pour ce corps de requ�te.<br /> 644 S'il ne reste plus de donn�es � transmettre pour ce corps de requ�te 645 (c'est � dire si le conteneur de servlets tente de lire au del� de 646 la fin du corps), le serveur va renvoyer un paquet <em>vide</em> 647 dont la charge utile est de longueur 0 et se pr�sentant sous la 648 forme <code>(0x12,0x34,0x00,0x00)</code>.</p> 649 650</div> 651</div> 652<div class="bottomlang"> 653<p><span>Langues Disponibles: </span><a href="/en/mod/mod_proxy_ajp.html" hreflang="en" rel="alternate" title="English"> en </a> | 654<a href="/fr/mod/mod_proxy_ajp.html" title="Fran�ais"> fr </a> | 655<a href="/ja/mod/mod_proxy_ajp.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> 656</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 again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div> 657<script type="text/javascript"><!--//--><![CDATA[//><!-- 658var comments_shortname = 'httpd'; 659var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_proxy_ajp.html'; 660(function(w, d) { 661 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 662 d.write('<div id="comments_thread"><\/div>'); 663 var s = d.createElement('script'); 664 s.type = 'text/javascript'; 665 s.async = true; 666 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 667 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 668 } 669 else { 670 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 671 } 672})(window, document); 673//--><!]]></script></div><div id="footer"> 674<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> 675<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[//><!-- 676if (typeof(prettyPrint) !== 'undefined') { 677 prettyPrint(); 678} 679//--><!]]></script> 680</body></html>